19

如何使用 python 以字节模式将字节字符串写入文件?

我有:

['0x28', '0x0', '0x0', '0x0']

如何将 0x28、0x0、0x0、0x0 写入文件?我不知道如何将此字符串转换为有效字节并写入。

4

2 回答 2

23

映射到一个bytearray()bytes()对象,然后将其写入文件:

with open(outputfilename, 'wb') as output:
    output.write(bytearray(int(i, 16) for i in yoursequence))

另一种选择是使用该binascii.unhexlify()函数将您的十六进制字符串转换为一个bytes值:

from binascii import unhexlify

with open(outputfilename, 'wb') as output:
    output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b)))

在这里,我们必须先切掉0x部分,然后重新格式化值以用零填充它并将整个连接成一个字符串。

于 2013-06-27T17:50:33.550 回答
11

在 Python 3.X 中,bytes()会将整数序列转换为字节序列:

>>> bytes([1,65,2,255])
b'\x01A\x02\xff'

生成器表达式可用于将您的序列转换为整数(请注意,int(x,0)根据其前缀将字符串转换为整数。 0x选择十六进制):

>>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
[40, 0, 0, 0]

结合它们:

>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
b'(\x00\x00\x00'

并将它们写出来:

>>> L = ['0x28','0x0','0x0','0x0']
>>> with open('out.dat','wb') as f:
...  f.write(bytes(int(x,0) for x in L))
...
4
于 2013-06-27T20:40:00.843 回答