2013-06-27 12 views
12
dosyasını

dosyaya göre bayt dizesine yazar. Python'u kullanarak bayt modunda bir dosyaya bir bayt dizisi nasıl yazarım?Python,

Ben:

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

Nasıl bir dosyaya 0x28, 0x0, 0x0, 0x0 yazıyorsunuz? Bu dizgiyi geçerli bir bayta dönüştürmeyi ve yazmayı bilmiyorum. Bir bytearray() veya bytes() nesneye

cevap

12

Harita, ardından dosyaya çıktıklarını yazdılar:

with open(outputfilename, 'wb') as output: 
    output.write(bytearray(int(i, 16) for i in yoursequence)) 
Başka bir seçenek bytes değere içine onaltılık dizeleri açmak için binascii.unhexlify() function kullanmaktır

:

from binascii import unhexlify 

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

Burada önce 0x parçasını kesmeliyiz, daha sonra sıfırları pes edecek şekilde yeniden biçimlendirmek ve tümünü bir dizgeye birleştirmek zorundayız.

Python 3.x
+0

benim için çalışıyor – zhaozhi

6

, bytes() bir bayt dizisi içine bir tamsayı dizisi dönecek: Bir jeneratör ifade tamsayılar içine dizisi dönüştürmek için kullanılabilir

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

(int(x,0) tamsayı için bir dize dönüştürür unutmayın .

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

bunları birleştiren:

>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0']) 
b'(\x00\x00\x00' 
önek göre 0x heks) seçer

Ve onları yazarken:

>>> L = ['0x28','0x0','0x0','0x0'] 
>>> with open('out.dat','wb') as f: 
... f.write(bytes(int(x,0) for x in L)) 
... 
4