Я пытаюсь упаковать содержимое байтового массива python в 4-байтовое целое число со знаком, используя struct.pack. К сожалению, pack хочет строку, поэтому после некоторого поиска в Google я решил, что мне нужно декодировать мой байт-массив в строку. Я полагал, что ascii имел ввиду, потому что символ ascii имеет длину байта. К сожалению, ascii не захотела поддерживать мои значения> 127, поэтому я подумал, что буду использовать замену ...
но когда я делаю это, декодирование возвращает объект типа unicode, и теперь каждый из моих байтов представляет собой строку из 4 символов ...
Это просто кажется немного нелепым, я упускаю что-то очевидное (ps я использую python около двух недель)
вот что я пытаюсь сделать ...
val = long(-5)
s = bytearray(pack("<i", val))
s.pop() # pop off msb
# write it out the way we want to then read it in the way the code does
fout = open("test.bat", "wb")
fout.write(s)
fout.close()
fin = open("test.bat", "rb")
inBytes = bytearray(fin.read(3))
# extend sign bit
if (inBytes[2] & 0x80):
inBytes.append(0xff)
else:
inBytes.append(0x00)
nb = inBytes.decode('ascii', 'replace')
# ERROR:root:after decode, len: 4 type: <type 'unicode'>
logging.error("after decode, len: {0} type: {1}".format(len(nb), type(nb)))
# struct.error: unpack requires a string argument of length 4
inInt32 = unpack('<i', inBytes.decode('ascii', 'replace'))[0]
fin.close()