#include <stdio.h>
int main(void)
{
float a=0.0f;
unsigned char * b = (unsigned char*)&a;
int c[4];
int i = 0;
c[0]=0xCD;
c[1]=0xCC;
c[2]=0xCC;
c[3]=0x41;
//scanf("%x %x %x %x", c+1, c, c+3, c+2);
printf("b1:%d\n",b);
for(i = 0; i<4; i++) b[i] = (unsigned char)c[i];
printf("b2:%d\n",*b);
printf("%f\n", a);
printf("a:%d\n",a);
}
如上面的程序,我感觉很奇怪,16进制数CD CC CC 41 是从传感器传过来的,代表一个温度(25.6),我有三个问题:
1 unsigned char * b = (unsigned char*)&a;这句话执行后b是a的引用吗?还是仅仅是传值?
2 为何这么转换后a的值回变成25.6??怎么算出来的??
3 为何b2与a不相等?
什么小端码?float类型的25.6的内存表示是0xa000000
追答float类型内存表示 请阅读 IEEE 754-2008 国际标准。计算机按此标准存放float数据。
数据传输和存放,涉及字节流序列。小端码 和 大端码 字节序列 不同。
我上面程序帮你正确显示内存序列了。
如果你的计算机和系统 特殊,不按 寻常 电子设备,别人不熟悉你的系统,便无法帮你了。