2024-10-01 13:26:14 发布
网友
我有一个bytestring"\x56\x20",它是两组数据,a(12位)和b(4位)。在
"\x56\x20"
未打包的数据预计为:
a=86 b=2个
其中:
a = int("056", 16) b = int("2", 16)
我知道我可以使用binascii将bytestring转换为一个十六进制字符串,然后对其进行切片魔术,但这看起来很混乱。在
binascii
我查看了struct,但无法找到一种方法来拆分12位/4位。在
struct
有更干净的方法吗?在
你似乎在把数据解释成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)
你似乎在把数据解释成little-endian。要解码,请使用
struct
进行解码,然后使用位移位和掩码来解释它们:对于非整字节数据的二进制分析,像bitstring这样的外部模块可能会有所帮助(当事情变得更复杂时,它肯定会有帮助):
相关问题 更多 >
编程相关推荐