Python中如何将定点数的十六进制表示转换为十进制表示?
十六进制Q1.30定点数转十进制的解决方法
方法一:使用numfi库正确取值
你之前的代码其实已经正确创建了numfi对象,只是没有获取对应的十进制数值。通过numfi对象的.value属性就能拿到转换后的十进制浮点数:
import numfi y = numfi(0x226B50B1, 1, 32, 30) print(y.value) # 输出约 0.5378
方法二:手动计算(无需第三方库)
Q1.30格式的定点数,本质是把十进制数放大2^30倍后取整的结果。反向转换时,只需将十六进制对应的整数除以2^30即可:
# 十六进制字符串转整数 hex_value = "226B50B1" integer_val = int(hex_value, 16) # 除以2^30得到十进制值 decimal_val = integer_val / (2 ** 30) print(decimal_val) # 输出约 0.5378
如果是负数的十六进制(最高位为1),需要先转成补码对应的有符号整数再计算:
hex_neg = "C26B50B1" integer_neg = int(hex_neg, 16) # 转换为32位有符号整数 signed_int = integer_neg - (1 << 32) if integer_neg >= (1 << 31) else integer_neg decimal_neg = signed_int / (2 ** 30)
方法三:使用numpy库处理
借助numpy的整数类型处理有符号转换,再计算十进制值:
import numpy as np hex_val = 0x226B50B1 # 转换为32位有符号整数 signed_int = np.int32(hex_val) decimal_val = signed_int / (2 ** 30) print(decimal_val) # 输出约 0.5378
内容的提问来源于stack exchange,提问作者MW2023
相关产品推荐
相关产品推荐

