一,說明:
1,傳遞參數需要是16進制格式的字符串,或者數字(不支持負數)
2,只支持32位,單精度
3,提供一個驗證使用的網址https://www.h-schmidt.net/FloatConverter/IEEE754.html
4,Hex轉浮點數 代碼如下:
--備註:math.modf() 這個函數就是爲了獲取除法的整數部分
function hexToFloat( hexString )
if hexString == nil then
return 0
end
local t = type( hexString )
if t == "string" then
hexString = tonumber(hexString , 16)
end
local hexNums = hexString
local sign = math.modf(hexNums/(2^31))
local exponent = hexNums % (2^31)
exponent = math.modf(exponent/(2^23)) -127
local mantissa = hexNums % (2^23)
for i=1,23 do
mantissa = mantissa / 2
end
mantissa = 1+mantissa
-- print(mantissa)
local result = (-1)^sign * mantissa * 2^exponent
return result
end
5,浮點數轉Hex字符
function FloatToHex( floatNum )
local S = 0
local E = 0
local M = 0
if floatNum == 0 then
return "00000000"
end
local num1,num2 = math.modf(floatNum/1)
local InterPart = num1
if floatNum > 0 then
S = 0 * 2^31
else
S = 1 * 2^31
end
local intercount = 0
repeat
num1 = math.modf(num1/2)
intercount = intercount + 1
until (num1 == 0)
E = intercount - 1
local Elen = 23 - E
InterPart = InterPart % (2^E)
InterPart = InterPart * (2^Elen)
E = E + 127
E = E * 2^23
for i=1,Elen do
num2 = num2 * 2
num1,num2 = math.modf(num2/1)
M = M + num1 * 2^(Elen - i)
end
M = InterPart + M
--E值爲整數部分轉成二進制數後左移位數:22.8125 轉成二進制10110.1101,左移4位 1.01101101
--E=4 ,再加上127 就爲所需E值
--010000011 01101101 000000000000000
local Result = S + E + M
Result = string.format("%08X",Result)
return Result
end