我在处理一些多字节的问题。例如,我有一个变量a = b'\x00\x01\x02\x03'
,它是bytes
对象而不是int
。我想struct.pack
将它与小endian组合成一个包,但是<4s
不起作用。实际上,<4s
和>4s
得到了相同的结果。如果我希望结果是b'\x03\x02\x01\x00
,该怎么办。
我知道我可以使用struct.pack('<L', struct.unpack('>L', a))
,但它是处理多字节对象的唯一方法吗?你知道吗
示例:
import struct
import secrets
mhdr = b'\x20'
joineui = b'\x00\x01\x02\x03\x04\x05\x06\x07'
deveui = b'\x08\x09\x10\x11\x12\x13\x14\x15'
devnonce = secrets.token_bytes(2)
joinreq = struct.pack(
'<s8s8s2s',
mhdr,
joineui,
deveui,
devnonce,
)
# The expected joinreq should be b'\x20\x07\x06\x05\x04\x03\x02\x01\x00\x15\x14\x13\x12\x11\x10\x09\x08...'
在我看来,你不想有4个单字符,而是1个整数。 所以你应该试着用“i”或“i”(无论是有符号的还是无符号的)来代替“4s”。你知道吗
你的例子应该是
“Q”表示长无符号(8字节)。如果您想使用float,您可以使用d来表示双浮点精度(8字节)。你知道吗
您可以看到the documentation of struct中所有字母的含义。你知道吗
相关问题 更多 >
编程相关推荐