Я пытаюсь упаковать содержимое байтового массива python в 4-байтовое целое число со знаком, используя struct.pack. К сожалению, пакету нужна строка, поэтому после некоторого поиска в Google я понял, что мне нужно декодировать мой массив байтов в строку. Я подумал, что ascii имел в виду с тех пор, потому что символ ascii имеет длину в байт. К сожалению, ascii не хотел поддерживать мои значения > 127, поэтому я решил использовать replace...
но когда я делаю это декодирование, возвращается объект типа 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()