问题1,3楼上已经解答很清楚了
回答第二个问题:
浮点数定义的存储格式:(来自百科)
单精度浮点数(Single)
用来表示带有小数部分的实数,一般用于科学计算。
占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。
单精度浮点数有多种表示形式:±n.n(小数形式) ±n E ±m(指数形式) ±n.n E ±m (指数形式)
如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
应该是传感器得到的是浮点数,通过4个字节读取出来,需要按原格式转换为浮点数形式.
unsigned char * b = (unsigned char*)&a; 指针b, 指向a的首地址。
怎么算出来的:
从传感器传过来的CD CC CC 41, 小端码的话,四个字节内容 变化 为 0x41cccccd
转 float 为 25.6。
你可以 自己 用 联合体 研究:
union U{
float v;
unsigned char c[4];
unsigned int i;
}uu;
main(){
uu.c[0]=0xcd;
uu.c[1]=0xcc;
uu.c[2]=0xcc;
uu.c[3]=0x41;
printf(" %f %x",uu.v,uu.i);
}
1.定义一个字符指针b,指向变量a的地址。由于类型不兼容,对a的地址进行了强转(前面括号里边的是类型强转)。
2.a的值变成了25.6。跟浮点型的数据的存储方式有关,这个我不清楚。你可以自己搜一下浮点型数据在内存中的存储方式。
3.b是字符类型的指针,对b取值只取8位。a位float型,占32位。