You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用struct.unpack()解析十六进制转储文件中的特定位段数据

解决方案

直接通过位运算处理struct.unpack得到的uint16数值,比字符串拆分更高效且可靠,步骤如下:

  1. 先获取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)
  1. 拆分三个值:
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:21:22