struct 模块是您想要的。从您的示例中, 824 = 0000001100111000 二进制或 0338 十六进制。这是两个字节 03H 和 38H。 struct.pack 会将 824 转换为这两个字节的字符串,但您还必须决定 little-endian(先写入 38H)还是 big-endian(先写入 03H)。
示例
>>> import struct
>>> struct.pack('>H',824) # big-endian
'\x038'
>>> struct.pack('<H',824) # little-endian
'8\x03'
>>> struct.pack('H',824) # Use system default
'8\x03'
struct 返回一个两字节的字符串。 '\x##' 表示法表示(具有十六进制值 ## 的字节)。 '8' 是一个 ASCII '8'(值 38H)。 Python 字节字符串使用 ASCII 表示可打印字符,使用 \x## 表示法表示不可打印字符。
以下是向文件写入和读取二进制数据的示例。在写入和读取二进制文件时,您应该始终指定字节序,以防它在具有不同字节序默认值的系统上读取:
import struct
a = 824
bin_data = struct.pack('<H',824)
print 'bin_data length:',len(bin_data)
with open('data.bin','wb') as f:
f.write(bin_data)
with open('data.bin','rb') as f:
bin_data = f.read()
print 'Value from file:',struct.unpack('<H',bin_data)[0]
print 'bin_data representation:',repr(bin_data)
for i,c in enumerate(bin_data):
print 'Byte {0} as binary: {1:08b}'.format(i,ord(c))
输出
bin_data length: 2
Value from file: 824
bin_data representation: '8\x03'
Byte 0 as binary: 00111000
Byte 1 as binary: 00000011