質問: [[0 for j in range(x)] for i in range(y)] ############################################## 上記の後、arrayの各要素に2byteずつ整数値としてデータを読み込ませたいのですが、 dataからarrayへの受け渡し方法が分からず悩んでいます。 かなり初歩的な質問かも知れませんが、ヒントでもいいので教えて下さい。 また、上記の時点で誤っていることがありましたら ご教授お願いします。
回答: http://docs.python.jp/2/library/stdtypes.html#file.read にあるように、ファイルオブジェクトのreadはstringを返します。つまり、 data = f.read(bytesize*x*y) なら、dataがstringです。 stringなので、xバイト目の「文字」は data[x] で取り出せます。 これは、元のバイナリデータの1バイトを、対応する「文字」にしたものです。元のバイナリデータを得るには、逆変換する必要があります。文字のコードを得るのには、ord関数( http://docs.python.jp/2/library/functions.html#ord )を使います ord(data[x]) 2バイトから16bitの整数を取るには、まず、2バイトそれぞれの値を得ます a0=ord(data[x0]) a1=ord(data[x1]) ここで、上位を8ビット左へシフトして、下位とのorを取れば、16ビットになります。 ただ、上記のa0,a1のどちらが上かは、どう保存したかによるので、今ある情報だけでは判断できません。 # a0が上なら y=a0 << 8 | a1 また、符号有り16bit整数だと、もう少し複雑になります。 全てのi,jについて、array[i][j]に対応するバイト位置 x0,x1 を求め、計算した値を代入する、という流れになります