首先了解下float在内存中的存储状态:
float类型占据4个字节,内存占据32位
32位就是0-31;且把0当做最高位 ,31当做最低位
最高位表示符号位: 1表示此浮点数为负 ,0为正
跟着的后8位就是阶码,阶码后面的为尾数共23位。
通过上面的了解即可以借助int类型 对float进行解析:
(在网络字节序中,高位在前,低位在后)
/*拼接字节转化为float
param1: 数组地址
param2: 起始字节下标
param3: 结束字节下标
return: 拼接值
*/
float Hex2float(BYTE *hex_arr, int s, int e)
{
int ret = 0;
int i;
for (i = s; i <= e; i++)
{
ret |= hex_arr[i] << (8 * (e - i));
}
float b = *(float*)&ret;
return b;
}
int main()
{
unsigned char buf[10] = {0};
float temp = 238.457;
unsigned char* p = (unsigned char*)&temp;//在windows中按照 从低到高存储
buf[0] = p[3];//赋值到数组
buf[1] = p[2];
buf[2] = p[1];
buf[3] = p[0];
//解析
float mp = Hex2float(buf, 0, 3);
cout << "temp:" << temp << endl << "mp:" << mp << endl;
return 0;
}
结果: