Модуль struct - это то, что вам нужно. Из вашего примера 824 = 0000001100111000 двоичный или 0338 шестнадцатеричный. Это два байта 03H и 38H. struct.pack преобразует 824 в строку из этих двух байтов, но вы также должны выбрать порядок с прямым порядком байтов (сначала запишите 38H) или порядок с прямым порядком байтов (напишите сначала 03H).
Пример
>>> import struct
>>> struct.pack('>H',824) # big-endian
'\x038'
>>> struct.pack('<H',824) # little-endian
'8\x03'
>>> struct.pack('H',824) # Use system default
'8\x03'
struct возвращает двухбайтовую строку. обозначение \ x ## означает (байт с шестнадцатеричным значением ##). «8» - это ASCII «8» (значение 38H). Байтные строки Python используют ASCII для печатных символов и нотацию \ x ## для непечатаемых символов.
Ниже приведен пример записи и чтения двоичных данных в файл. Вы должны всегда указывать порядковый номер при записи и чтении из двоичного файла, если он читается в системе с другим порядковым номером по умолчанию:
import struct
a = 824
bin_data = struct.pack('<H',824)
print 'bin_data length:',len(bin_data)
with open('data.bin','wb') as f:
f.write(bin_data)
with open('data.bin','rb') as f:
bin_data = f.read()
print 'Value from file:',struct.unpack('<H',bin_data)[0]
print 'bin_data representation:',repr(bin_data)
for i,c in enumerate(bin_data):
print 'Byte {0} as binary: {1:08b}'.format(i,ord(c))
выход
bin_data length: 2
Value from file: 824
bin_data representation: '8\x03'
Byte 0 as binary: 00111000
Byte 1 as binary: 00000011