Python записывает строку байтов в файл

Как написать строку байтов в файл, в байтовом режиме, используя python?

У меня есть:

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

Как написать 0x28, 0x0, 0x0, 0x0 в файл? Я не знаю, как преобразовать эту строку в действительный байт и записать его.

Ответ 1

Отобразите объект bytearray() или bytes(), а затем напишите это в файл:

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

Другой вариант - использовать функцию binascii.unhexlify(), чтобы превратить ваши шестнадцатеричные строки в значение bytes:

from binascii import unhexlify

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

Здесь сначала нужно отрубить часть 0x, затем переформатируем значение, чтобы поместить его нулями и соединить целое в одну строку.

Ответ 2

В Python 3.X, bytes() превратит целочисленную последовательность в последовательность байтов:

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

Выражение генератора может использоваться для преобразования вашей последовательности в целые числа (обратите внимание, что int(x,0) преобразует строку в целое число в соответствии с ее префиксом. 0x выбирает hex):

>>> 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