float型变量在内存中占4个字节(共32位)。
有的时候,我们需要将float型变量拆分成2个16位变量。并且要求能够将这2个16位变量进行还原。
C/C++核心代码如下:
/*这是要被拆分的float型变量*/
float a = 1.234;
/*1 拆分*/
int16_t *pa1 = (int16_t *)(&a); //获得a前16位地址
int16_t *pa2 = pa1+1; //获得a后16位地址
/*定义一个同类型对象,用来接收组合后的结果*/
float b = 0.0;
int16_t *pb1 = (int16_t *)(&b);
int16_t *pb2 = pb1+1;
/*2 组合*/
*pb1 = *pa1; //将a前16位地址的内容(2进制码)复制给pb1指向的内存空间。
*pb2 = *pa2; //将b前16位地址的内容(2进制码)复制给pb2指向的内存空间。
/打印结果/
printf("组合结果:b = %f\n",b); //组合结果:b = 1.234
图解分析:
10进制的1.234转化位16进制结果位:3F 9D F3 B6