2013-06-27 6 views
12

バイトコードをファイルにバイトコードで書くにはどうしたらいいですか?Pythonはファイルへのバイトの文字列を書き込みます

私が持っている:

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

どのように私は、ファイルへの0x28、0x0の、0x0の、0x0のを書くのですか?この文字列を有効なバイトに変換して書き込む方法がわかりません。 bytearray()またはbytes()オブジェクトへ

答えて

12

地図、そしてファイルにそれを書く:

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

別のオプションは、bytes値にあなたの進文字列をオンにするbinascii.unhexlify() functionを使用することです:

from binascii import unhexlify 

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

ここでは最初に0x部分を切り捨ててから、値を再フォーマットして0で埋め込み、全体を1つの文字列に結合する必要があります。 Pythonの3.X、bytes()

+0

を、それは私の作品 – zhaozhi

6

はバイトシーケンスに整数列をオンにします:

>>> 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 
関連する問題