functionhex_to_float(hex)local i =tonumber(hex,16)-- 将十六进制数转换为整数local s =((i >>31)==0)and1or-1-- 提取符号位local e =(i >>23)&0xFF-- 提取指数部分local m =(e ==0)and(i &0x7FFFFF)<<1or(i &0x7FFFFF)|0x800000-- 提取尾数部分return s *(2^(e -127))*(m /8388608.0)-- 计算浮点数endlocal hex_string ="42F63D70"local result =hex_to_float(hex_string)print(result)-- 应该输出接近 123.12 的值
例子2
functionhex_to_float(hex)local i =tonumber(hex,16)-- 将十六进制数转换为整数 local s =(i >>31)==0x80000000and-1or1-- 提取符号位 local e =(i >>23)&0xFF-- 提取指数部分 local m
if e ==0then
m = i &0x7FFFFF-- 当指数为0时,尾数不包含隐藏的1 else
m =(i &0x7FFFFF)|0x800000-- 否则,添加隐藏的1 end-- 计算浮点数值 local result
if e ==0xFFthen-- 处理 NaN 和无穷大 if m ~=0then-- NaN
result =0/0else-- 无穷大
result = s ==1and math.huge or-math.huge
endelse-- 正规化浮点数
result = s *(m /2^23)*(2^(e -127))endreturn result
endlocal hex_string ="42F63D70"local result =hex_to_float(hex_string)print(result)-- 应该输出接近 123.12 的值