Python struct.pack 和解包

问题描述 投票:0回答:2

我想反转以下代码的打包:

struct.pack("<"+"I"*elements, *self.buf[:elements])

我知道“<" means little endian and "I" is unsigned int. How can I use struct.unpack to reverse the packing?

python binary byte endianness
2个回答
14
投票

struct.pack
接受非字节值(例如整数、字符串等)并将其转换为
bytes
。相反,
struct.unpack
接受
bytes
并将它们转换为“高阶”等价物。

例如:

>>> from struct import pack, unpack
>>> packed = pack('hhl', 1, 2, 3)
>>> packed
b'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpacked = unpack('hhl', packed)
>>> unpacked
(1, 2, 3)

因此,在您的实例中,您有小端无符号整数(

elements
其中很多)。您可以使用相同的结构字符串(
'<' + 'I' * elements
部分)解压它们 - 例如
struct.unpack('<' + 'I' * elements, value)

示例来自:https://docs.python.org/3/library/struct.html


1
投票

查看文档:https://docs.python.org/3/library/struct.html

obj = struct.pack("<"+"I"*elements, *self.buf[:elements])
struct.unpack("<"+"I"*elements, obj)

这对你有用吗?

© www.soinside.com 2019 - 2024. All rights reserved.