C语言 4字节(16进制)转换成浮点数的问题

#include<stdio.h>intmain(void){floata=0.0f;unsignedchar*b=(unsignedchar*)&a;intc[4];i... #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不相等?
展开
 我来答
staryy
2013-10-29 · TA获得超过169个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:132万
展开全部
问题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个字节读取出来,需要按原格式转换为浮点数形式.
TableDI
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,... 点击进入详情页
本回答由TableDI提供
金色潜鸟
推荐于2017-09-02 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5540万
展开全部
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);
}
追问
什么小端码?float类型的25.6的内存表示是0xa000000
追答
float类型内存表示 请阅读 IEEE 754-2008 国际标准。计算机按此标准存放float数据。

数据传输和存放,涉及字节流序列。小端码 和 大端码 字节序列 不同。

我上面程序帮你正确显示内存序列了。

如果你的计算机和系统 特殊,不按 寻常 电子设备,别人不熟悉你的系统,便无法帮你了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与子如初见
2013-10-29 · TA获得超过1638个赞
知道小有建树答主
回答量:1117
采纳率:100%
帮助的人:784万
展开全部
1.定义一个字符指针b,指向变量a的地址。由于类型不兼容,对a的地址进行了强转(前面括号里边的是类型强转)。
2.a的值变成了25.6。跟浮点型的数据的存储方式有关,这个我不清楚。你可以自己搜一下浮点型数据在内存中的存储方式。
3.b是字符类型的指针,对b取值只取8位。a位float型,占32位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式