登录
首页 单片机论坛
回帖 发帖
正文

主题:【求助】单片机32位16进制浮点数转换为10进制

点击:2110 回复:10

如题
单片机读取一个32位的16进制数,符合IEEE754国际标准的四字节形式,我要想把它转换为10进制并放大100倍后,在数码管上显示!请问怎么操作?
比如我单片机读过来的数据是16进制:43FA0000,换算后实际是10进制浮点数500.00,我想放大100倍后用于在数码管显示,浮点数这块如何处理呢?
大师能给一个参考程序吗,尤其是浮点数处理这块!
最后修改:2014/11/20 14:30:46
14-11-20 12:24
按照你需要的精度可以把float 或者 double的浮点数乘以一个倍数如100 转换u32或者s32 变成了整数   方面处理 送去显示 至于16进制与10进制转换是显示部分需要考虑的 16进制转10的C语言程序很多 例如12864屏幕小数部分可以加小数点   IEEE-754格式标准底数只有23位精度
14-11-20 12:53
问题不是很清楚嘛,你是数据格式不好转换,还是说带有小数无法再数码管上显示呢
14-11-20 13:16

引用 NUAAtyj 在 2014/11/20 12:53:03 发言【内容省略】

有程序否?
14-11-20 14:02
U8 buf[4] = {0x43,0xFA,0x00,0x00};
FP32 *p;
p = (FP32*)buf; //  通常这样就可以解决问题
*p = *p * 100; // 这样做不好,但只是为了理解
LED0 = (S32)(*p)%10;
LED1 = (S32)(*p)/10%10;
LED2 = (S32)(*p)/100%10;
LED3 = (S32)(*p)/1000%10;
最后修改:2014/12/13 13:09:57
14-12-13 13:06

引用 svpama 在 2014/12/13 13:06:21 发言【内容省略】

FP32这是 浮点数的定义吗?
S32是32位整数的定义吗?
14-12-14 20:22
是的,FP32指浮点32位,S32指32位整形数。
不过有个问题,就是大小端不同的时候,需要把顺序调整好,如:
buf[0]的数放在buf[3]的位置,
buf[1]的数放在buf[2]的位置,
,,,
即倒过来,或者不同的单片机或编译器而异。
整理一下,这样可能会好理解:
U8 buf[4] = {0x43,0xFA,0x00,0x00};
FP32 *p;
FP32 f;
S32 n;
p = (FP32*)buf; //  通常这样就可以解决问题
f = *p;
f = f*100;
n = (S32)f;
LED0 = n%10;
LED1 = n/10%10;
LED2 = n/100%10;
LED3 = n/1000%10;
最后修改:2014/12/15 18:43:36
14-12-15 18:36

引用 svpama 在 2014/12/15 18:36:34 发言【内容省略】

谢了!
14-12-16 12:31
最好用sprintf()函数是正解
15-02-09 17:57

引用 steelen 在 2015/2/9 17:57:43 发言【内容省略】

我需要在数码管显示!
15-02-11 22:44

上一页下一页

工控新闻

更多新闻资讯