4

バイナリファイルから読みたい構造があります。私はpythonの構造体に使用しようとしています。読み取り用の文字列は次のとおりです。

.... = struct.unpack('I36s36s72sQQIIH4s36s4s20s', datab.read(238))

それは正常に動作します。値を画面に出力することで確認します。

ここで、「4s」を「I」に変更したいと思います。文字列を次のように変更すると:

.... = struct.unpack('I36s36s72sQQIIHI36s4s20s', datab.read(238))

(最初の「4」を「I」に変更)、エラーが発生しました:

struct.error: unpack requires a bytes object of length 240

「I」のサイズは 4 バイトであるとドキュメントに記載されているのに、なぜ私の変更でエラーが発生するのでしょうか?

4

1 に答える 1

5

これはアライメントに関係しています。I4 バイト境界でアライメントされ、その前に 2 バイトのパディングが必要です。一方、4sそのような要件はありません。

7.3.2.1を参照してください。これをオフにする方法については、バイト オーダー、サイズ、および配置を参照してください。

于 2013-03-22T14:40:54.993 に答える