解码interoctet二进制数据

2024-10-01 13:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个bytestring"\x56\x20",它是两组数据,a(12位)和b(4位)。在

未打包的数据预计为:

a=86 b=2个

其中:

a = int("056", 16)
b = int("2", 16)

我知道我可以使用binascii将bytestring转换为一个十六进制字符串,然后对其进行切片魔术,但这看起来很混乱。在

我查看了struct,但无法找到一种方法来拆分12位/4位。在

^{pr2}$

有更干净的方法吗?在


Tags: 数据方法字符串魔术切片structintbytestring
3条回答

你似乎在把数据解释成little-endian。要解码,请使用struct进行解码,然后使用位移位和掩码来解释它们:

import struct
two_octets = '\x56\x20'
values = struct.unpack('<H', two_octets)[0]
a = values & 0xFFF  # Select right-most 12 bits
b = values >> 12    # Select left-most 4 bits

对于非整字节数据的二进制分析,像bitstring这样的外部模块可能会有所帮助(当事情变得更复杂时,它肯定会有帮助):

>>> from bitstring import BitArray
>>> a = BitArray(bytes='\x20\x56')
>>> a.unpack('uint:4, uint:12')
[2, 86]
>>> import struct
>>> divmod(struct.unpack('<H', '\x56\x20')[0], 2 ** 12)
(2, 86)

相关问题 更多 >