ฉันกำลังพยายามแพ็คเนื้อหาของ python bytearray ลงในจำนวนเต็มที่ลงนามขนาด 4 ไบต์โดยใช้ struct.pack น่าเสียดายที่ pack ต้องการสตริง ดังนั้นหลังจากใช้ googling ฉันคิดว่าฉันต้องถอดรหัส bytearray เป็นสตริง ฉันคิดว่า ascii มีความหมายเพราะว่าอักขระ ascii มีความยาวหนึ่งไบต์ น่าเสียดายที่ ascii ไม่ต้องการสนับสนุนค่าของฉัน > 127 ดังนั้นฉันคิดว่าฉันจะใช้การแทนที่...
แต่เมื่อฉันทำการถอดรหัสนี้ส่งคืนออบเจ็กต์ประเภทยูนิโค้ดและตอนนี้แต่ละไบต์ของฉันเป็นสตริงอักขระ 4 ตัว...
มันดูไร้สาระนิดหน่อย ฉันขาดอะไรบางอย่างที่ชัดเจนไป (ปล. ฉันใช้ 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()