0

ファイルにバイナリ データ (int、double、raw バイト) を書き込むアプリケーションに取り組んでいます。

問題は、データが実際には期待どおりにファイルに書き込まれていないことです。

>>> import struct
>>> import io
>>> out = io.open("123.bin", "wb+")
>>> format = "!i"
>>> data = struct.pack(format, 1)
>>> out.write(data)
4L
>>> data
'\x00\x00\x00\x01'
>>> out.close()
>>> infile = io.open("123.bin", "rb")
>>> instr = infile.read()
>>> instr
'\x00\x00\x00\x01'
>>> struct.unpack("!I", instr)
(1,)

そのため、すべてがうまく機能しているように見えます。しかし、詳しく調べると、123.binファイルには次の内容が含まれています。

$ hexdump 123.bin 
0000000 0000 0100                              
0000004

io.write()したがって、バイトが!によってスワップされたようです。

Pythonのドキュメントには、io.write()「指定されたバイトまたはbytearrayオブジェクト」を受け入れると書かれていますが、問題は、次をstruct.pack返すことstrです:

>>> type(struct.pack(format, 1))
<type 'str'>

それで、私は何を間違っていますか?str文字セットを変換せbytesずに変換するにはどうすればよいですか?

4

3 に答える 3

1

ここでの問題は python ではなく、hexdump にあります。ファイル内のデータを 16 ビットのリトル エンディアン値として扱っています。行う必要があるのは、データを 8 ビット値として扱うように hexdump に指示することです。調べなくても、「-c」オプションだと思います。

于 2013-06-27T17:32:30.613 に答える