我正在写一个应用程序将二进制数据(整数,双精度,原始字节)写入文件。Python mangles struct.pack字符串写入磁盘
问题是,这些数据是不实际写入文件我希望它是方式:
>>> 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
?
'hexdump -C' returns'00000000 00 00 00 01 | .... |',是的,它看起来像'hexdump'的默认模式是“破碎”。 –