1. C++十六进制转浮点
float在内存中占用四个字节,例如有个数1.11,那么他在内存中的存储格式为
在C++中,因为联合体union成员是占据同一个内存位置,可以利用这个特性,来实现十六进制转浮点的操作,原理如下:
union
{
unsigned char buffer[4];
float fValue;
}test1;
//为了演示一个个赋值
test1.buffer[0] = 0x7A;
test1.buffer[1] = 0x14;
test1.buffer[2] = 0x8E;
test1.buffer[3] = 0x3F;
//则fValue的值就为1.11
cout << test1.fValue <<endl;
//另外这种转换的方法也可以
//float tempValue = *((float*)test1.buffer);
//tempValue也为1.11
2. lua
lua的用法也是类似(基于lua5.3才有string.pack和string.unpack)
local temp = string.pack("<BBBB",0x7A,0x14,0x8E,0x3F)
local Value = string.unpack("f",temp)
print(Value)