你需要struct模块。import struct
fout = open('test.dat', 'wb')
fout.write(struct.pack('>i', 42))
fout.write(struct.pack('>f', 2.71828182846))
fout.close()
struct.pack中的第一个参数是格式字符串。
格式字符串中的第一个字符指示数据的字节顺序或endianness(是存储在第一个字节中最重要或最不重要的字节-大端或小端)。端性因系统而异。如果“>;”不起作用,请尝试“<;”。
格式字符串中的第二个字符是数据类型。毫不奇怪,“i”代表整数,“f”代表浮点数。字节数由类型决定。例如,short或“h”是两个字节长。也有无符号类型的代码。”例如,H“对应于无符号的缩写。
struct.pack中的第二个参数当然是要打包到bytes对象中的值。
我告诉你我在一些事情上撒了谎。首先我说字节数是由类型决定的。这只是部分事实。给定类型的大小在技术上依赖于平台,因为C/C++标准(Stutt模块基于此)只指定了EM>最小EEE>大小。这就引出了第二个谎言。格式字符串中的第一个字符还编码将使用标准(最小)字节数还是本机(依赖于平台)字节数。(同时“>;”和“<;”保证使用标准的最小字节数,在整数“i”或浮点“f”的情况下实际上是四个字节)。它还对数据的alignment进行编码。
还可以将多个原语打包到单个字节对象中,并实现相同的结果。import struct
fout = open('test.dat', 'wb')
fout.write(struct.pack('>if', 42, 2.71828182846))
fout.close()
当然,还可以使用struct.unpack解析二进制数据。