Skip to main content
 首页 » 编程设计

python之解码八位字节间的二进制数据

2025年05月04日17artech

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

解压后的数据应该是:

一=86 b = 2

地点:

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

我知道我可以使用 binascii 将 bytestring 转换为十六进制字符串,然后对其进行 slice magic,但这看起来很困惑。

我查看了struct,但找不到拆分 12 位/4 位的方法。

>>> import binascii 
>>> two_octets = "\x56\x20" 
>>> hex_str = binascii.hexlify(two_octets) 
>>> temp_a, temp_b = hex_str[:2], hex_str[2:] 
>>> a_part, b_part = reversed([c for c in temp_b]) 
>>> int(a_part + temp_a, 16) 
86 
>>> int(b_part, 16) 
2 
>>> 

有没有更简洁的方法?

请您参考如下方法:

您似乎将数据解释为小尾数法。要解码,请使用 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