13

uint16バイナリデータの配列をPythonでデータに解凍したいと思います。

インターネットにはstruct.unpack、サイズ4のバイナリ配列を使用した例がたくさんありますが、それを扱った例だけです。

これらの例のほとんどは次のとおりです(Bファイルからのバイナリ配列です)

U = struct.unpack("HH",B[0:4]);

だから私はサイズ6の配列を開梱しようとしました:

U = struct.unpack("HHH",B[0:6]);

できます。

Lしかし、サイズの配列(Lペア)を解凍したい場合はどうすればよいですか?私はそれを試しました:

U = struct.unpack("H"*(L/2),B[0:L]);

しかし、それは機能しません、プロンプターは私にエラーを与えます(L=512例えば):

struct.error: unpack requires a string argument of length 512

バイナリ配列をに解凍したい場合は、この配列の半分のサイズのuint16文字列が必要なので、このメッセージは奇妙です..."HHH...HHH"

誰かが私に助けを提供してくれたらとてもありがたいです。


私は少し進歩します...実際、私は試しました:

U = struct.unpack("H"*8,B[0:8]); 

できます。

U = struct.unpack("H"*10,B[0:10]);

できます。

U = struct.unpack("H"*222,B[0:444]);

それはまだ動作します

U = struct.unpack("H"*223,B[0:446]);

動作しません!446より大きいサイズでは機能しません

それが誰かが私に答えるのを助けることを願っています。


@MarkRansom len(B)をチェックしましたが、実際の長さは444です。Bは:から来ているので、Bはサイズ512の配列であると確信しました。 B = f.read(512)ここで、Fは8000バイトサイズのファイルです。したがって、read()の問題...この回答に感謝します!しかし、誰かがサイズLのバイナリ配列を解凍するのを手伝ってくれるなら、私は感謝するでしょう

4

3 に答える 3

13

array.fromstringまたはarray.fromfileを使用します(http://docs.python.org/2/library/array.htmlを参照)。

import array
U = array.array("H")
U.fromstring(B)
于 2012-11-15T16:59:26.037 に答える
8

同じものの可変長バージョン:

n = 999
U = struct.unpack(str(n)+"H", B)
于 2015-07-22T23:25:40.970 に答える
5

バイナリ データから n 個の要素をアンパックする場合は、データ型と共に要素の数を指定します。n=999 の場合:

U = struct.unpack("999H", B)
于 2014-07-07T08:38:51.003 に答える