如何用struct.unpack()解析十六进制转储文件中的特定位段数据
解决方案
直接通过位运算处理struct.unpack得到的uint16数值,比字符串拆分更高效且可靠,步骤如下:
- 先获取uint16原始数值:
import struct binary_bytes = b'\x11\x0e\x0e\x0b\x04\x0e\x89\x05\x00\x00\xa4\x93\xd6N\xa4\x93VNE\x01}Y\x906\x00`\x18\x06\x00' uint16_val = struct.unpack('<H', binary_bytes[20:22])[0] # 结果为22909(0x597D)
- 拆分三个值:
- value_1(低7位):用
& 0x7F保留低7位(0x7F是二进制0b01111111)value_1 = uint16_val & 0x7F # 结果:125 - 先把数值右移7位,剥离value_1,得到包含value_2和value_3的部分:
temp = uint16_val >> 7 # 结果:178 - value_2(temp的低7位):同样用
& 0x7F提取value_2 = temp & 0x7F # 结果:50 - value_3(temp的最高1位):把temp右移7位,剩下的就是这1位
value_3 = temp >> 7 # 结果:1
原理说明
& 0x7F:二进制中保留最后7位,其余位清零,刚好匹配7位长度的取值需求>> n:将数值的二进制位整体右移n位,相当于丢弃低n位,高位补0,用来剥离已提取的低位数据
内容的提问来源于stack exchange,提问作者Maze
相关产品推荐
相关产品推荐

