2013-06-27 51 views
12

如何在字节模式下使用python将一串字节写入文件?Python将字节字符串写入文件

我:

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

我怎样写0×28,为0x0,为0x0,0x0到一个文件?我不知道如何将此字符串转换为有效字节并写入。

回答

12

映射到bytearray()bytes()对象,然后写在文件:

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

另一种选择是使用binascii.unhexlify() function把你的十六进制字符串成bytes值:

from binascii import unhexlify 

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

在这里,我们必须首先切掉0x部分,然后重新格式化该值以填充零并将整体加入到一个字符串中。

+0

它为我工作 – zhaozhi

6

在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