Pythonを使用して、バイトモードでバイト文字列をファイルに書き込むにはどうすればよいですか?
私が持っています:
['0x28', '0x0', '0x0', '0x0']
0x28、0x0、0x0、0x0をファイルに書き込むにはどうすればよいですか?この文字列を有効なバイトに変換して書き込む方法がわかりません。
bytearray()
またはbytes()
オブジェクトにマップし、それをファイルに書き込みます。
_with open(outputfilename, 'wb') as output:
output.write(bytearray(int(i, 16) for i in yoursequence))
_
別のオプションは、 binascii.unhexlify()
function を使用して、16進文字列をbytes
値に変換することです。
_from binascii import unhexlify
with open(outputfilename, 'wb') as output:
output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b)))
_
ここでは、最初に_0x
_部分を切り取ってから、値を再フォーマットしてゼロで埋め、全体を1つの文字列に結合する必要があります。
Python 3.X、bytes()
では、整数シーケンスをバイトシーケンスに変換します。
_>>> bytes([1,65,2,255])
b'\x01A\x02\xff'
_
ジェネレータ式を使用して、シーケンスを整数に変換できます(int(x,0)
は、接頭辞に従って文字列を整数に変換します。_0x
_は16進を選択します)。
_>>> 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
_