如何将输入数值转换为32位十六进制值并拆分得到单字节十六进制列表
实现方案
错误原因
struct.pack方法要求传入整数参数,你传入了格式化得到的十六进制字符串,类型不匹配导致报错- 你使用的
<H格式符仅对应2字节小端无符号整数,既无法满足32位(4字节)的转换需求,小端序的输出顺序也和你预期的[0x0,0x0,0x0,0xA]不符
推荐实现(基于struct)
直接使用原始整数作为struct.pack的入参,选择大端序32位无符号整数格式符>I即可:
import struct myNum = 10 # 大端序打包为4字节32位无符号整数 packed_bytes = struct.pack('>I', myNum) # 转换为整数列表 myList = list(packed_bytes) print(myList) # 输出 [0, 0, 0, 10],等价于你要的[0x0,0x0,0x0,0xA]
注:Python中整数的十进制表示和十六进制表示完全等价,10与0xA是同一个值,若需要显示为十六进制格式,可单独对列表元素做格式化输出。
可选实现(基于字符串分割)
如果需要先处理十六进制字符串再拆分,也可以用以下方法:
myNum = 10 # 转换为8位补零的十六进制字符串,去掉0x前缀 hex_str = f"{myNum:08X}" # 每两位分割后转十六进制整数 myList = [int(hex_str[i:i+2], 16) for i in range(0, 8, 2)]
内容的提问来源于stack exchange,提问作者gogogo
相关产品推荐
相关产品推荐

