我正在开发一个将二进制数据(整数、双精度、原始字节)写入文件的应用程序。
问题是,数据实际上并没有按照我期望的方式写入文件:
>>> 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()
接受“给定字节或字节数组对象”,问题是,它struct.pack
确实返回一个str
:
>>> type(struct.pack(format, 1))
<type 'str'>
那么,我做错了什么?如何在没有任何字符集翻译的情况下转换str
为?bytes