Saya mencoba mengemas konten python bytearray ke dalam integer bertanda 4byte menggunakan struct.pack. Sayangnya, paket menginginkan sebuah string, jadi setelah beberapa googling saya pikir saya perlu memecahkan kode bytearray saya menjadi sebuah string. Saya pikir maksud ascii karena karakter ascii panjangnya satu byte. Sayangnya, ascii tidak mau mendukung nilai saya > 127, jadi saya pikir saya akan menggunakan replace...
tetapi ketika saya melakukan dekode ini mengembalikan objek bertipe unicode dan sekarang setiap byte saya adalah string 4 karakter...
Ini sepertinya agak konyol, saya melewatkan sesuatu yang jelas (ps saya telah menggunakan python selama sekitar dua minggu)
inilah yang saya coba lakukan...
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()