Quiero pasar valores punto de coma flotante a bytes para escribirlos en un archivo binario en formato de 32 bits little endian, pero algo falla en mi función. para facilitar el debug agregue un debug dialog, el resultante esperado debería ser: 85 EB 91 3F, en su lugar estoy obteniendo: 05 EB 01 48, y no entiendo por qué, no sé si es un problema de lua 5.1 o algo falla en la función, quizás estoy calculando mal el exponente, no estoy seguro, alguien ha tenido que tratar con algo similar antes?
Aquí la función:
Estoy intentando replicar algo que en c++ parece ser relativamente 'sencillo'
Aquí la función:
function FloatToBytes(x)
Debug.ShowWindow(true);
local sign = 0;
if(x < 0)then
sign = 1;
x = - x;
end
local mantissa, exponent = math.frexp(x); exponent = exponent + 126;
local byte1 = math.floor(mantissa * 128) % 256; mantissa = (mantissa - byte1 / 128) * 256;
local byte2 = math.floor(mantissa) % 256; mantissa = (mantissa - byte2) * 256;
local byte3 = math.floor(mantissa) % 256; mantissa = (mantissa - byte3) * 256;
local byte4 = math.floor(mantissa) + exponent * 128 + sign * 128; byte4 = byte4 % 256;
Debug.Print("\r\n"..string.format("%02X ", byte4)..string.format("%02X ", byte3)..string.format("%02X ", byte2)..string.format("%02X ", byte1));
return string.char(byte4, byte3, byte2, byte1);
end
FloatToBytes(1.14);
Código: Seleccionar todo
Write(/*1.14*/, sizeof(float))