|
发表于 2017-2-10 14:21:22
|
显示全部楼层
a0a.1 32b0c
浮点数在内存中是用4个字节的表示的,知道了这个之后借助联合体可以有下面的一个可行的方法:
- union UFloat
- {
- float f; // 浮点数
- uint8_t by4[4]; // 对应的16进制数据
- };
- float a,b;
- float c0 = -7.691887,d0 = 4.412552;
- union UFloat ua,ub,uc,ud;
- int main(void)
- {
- //数组buff中存的16进制数据即为浮点数c0,d0对应的16进制
- uint8_t buff[] = {0xF0,0x23, 0xF6,0xC0,0xA0, 0x33,0x8D,0x40};
- uint8_t t;
- //将浮点数c0,d0对应的16进制分别赋值给联合体ua,ub
- for(t = 0;t < 4;t++)
- {
- ua.by4[t] = buff[t];
- ub.by4[t] = buff[t+4];
- }
- //取得联合体ua,ub中浮点数的值赋值给a,b
- a = ua.f;
- b = ub.f;
- //将相应的浮点数赋值给联合体uc.f和ud.f
- //便于查看浮点数c0,d0对应的16进制
- uc.f = c0;
- ud.f = d0;
- //从调试结果可以看到a的值和c0的相等.b的值和d0的相等
- }
复制代码
运行结果:
|
|