2013-06-27 28 views
12

Làm cách nào để viết chuỗi byte vào tệp, ở chế độ byte, sử dụng python?Python ghi chuỗi byte thành tệp

tôi có:

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

Làm thế nào để viết 0x28, 0x0, 0x0, 0x0 vào một tập tin? Tôi không biết làm thế nào để chuyển đổi chuỗi này thành một byte hợp lệ và viết nó.

Trả lời

12

Map để một bytearray() hoặc bytes() đối tượng, sau đó viết rằng vào file:

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

Một lựa chọn khác là sử dụng binascii.unhexlify() function để biến chuỗi hex của bạn thành một giá trị bytes:

from binascii import unhexlify 

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

Ở đây chúng ta phải cắt phần 0x trước, sau đó định dạng lại giá trị để đệm nó bằng số không và nối toàn bộ thành một chuỗi.

+0

nó làm việc cho tôi – zhaozhi

6

Trong Python 3.x, bytes() sẽ biến một dãy số nguyên vào một chuỗi byte:

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

Một biểu thức máy phát điện có thể được sử dụng để chuyển đổi chuỗi thành số nguyên (lưu ý rằng int(x,0) chuyển đổi một chuỗi thành một số nguyên . theo tiền tố của nó 0x chọn hex):

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

Kết hợp chúng:

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

Và viết chúng ra:

>>> L = ['0x28','0x0','0x0','0x0'] 
>>> with open('out.dat','wb') as f: 
... f.write(bytes(int(x,0) for x in L)) 
... 
4 
Các vấn đề liên quan