按位段拼接十六进制
需求:
给一组位段及对应的值,拼接出该十六进制值。
如,
[15] : 0x1
[31:16] : 0xfafa
[14:1] : 0x1af0
[0:0] : 0x1
def parse_range(range_str):"""解析位段字符串,返回高位和低位"""parts = range_str.split(':')if len(parts) == 1:high = low = int(parts[0])else:high, low = map(int, parts)return high, lowdef hexstr_to_int(hex_str):"""将十六进制字符串转为整数"""return int(hex_str, 16)def set_bits(value_dict):"""根据位段和值(十六进制字符串)进行拼接"""full_value = 0for bit_range, hex_str in value_dict.items():high, low = parse_range(bit_range)width = high - low + 1value = hexstr_to_int(hex_str)if value >= (1 << width):raise ValueError(f"值 {hex_str} 超出位宽 {width} 位能表示的范围")full_value |= (value & ((1 << width) - 1)) << lowreturn full_value# 示例输入,包括一个 1 位宽的字段
input_data = {"15" : "0x1","31:16": "0xfafa","14:1" : "0x1af0","0:0" : "0x1" # 单个位:bit 0
}# 拼接结果
result = set_bits(input_data)# 打印结果
print(f"拼接结果: 0x{result:08x}") ## 拼接结果: 0xfafab5e1