ファイルにバイナリ データ (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
ずに変換するにはどうすればよいですか?