将字符串字节写入文件的Python方法

19

我该如何使用Python以字节模式将一系列字节写入文件中?

现有代码:

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

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

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的部分,然后重新格式化该值并用零填充,最后将其合并为一个字符串。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接