打印
[ARM入门]

浮点数处理问题,C语言中如何 取出 浮点型数据 的字节格式 ?

[复制链接]
2080|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hello_海涛|  楼主 | 2016-11-22 23:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言中如何 取出 浮点型数据 的字节格式 ? 如 : -12.5 在内存中占用4个字节,其字节格式为 0xC1480000

我要把 -12.5这个值通过modbus通信传出去,能通过什么语句取出内存中的这4个字节吗?或者要用什么算法来计算出这4个字节吗?
使用KEILL,C语言编程实验时,我把 指向值为-12.5的变量 的指针 强制转换为unsigned long 然后读取指针下的数据,不好使~~

相关帖子

沙发
hello_海涛|  楼主 | 2016-11-23 01:05 | 只看该作者
问题解决了   分享一下:
把float数据区看做一块内存区域,通过指向它的指针强制解释为uchar类型就读出来了
例如:
float test222=-12.5;
void *p222=(void*)&test222;
ADD222=*(*unsigned char)(p222);//读出最低位的那个字节
...
ADD555=*((*unsigned char)(p222)+3);//读出最高位的那个字节


使用特权

评论回复
板凳
aozima| | 2016-11-23 09:45 | 只看该作者
在内存里面,一般都是以 IEEE 754 标准存储,
如果两边都以这个标准,那就直接传输4个字节,
但一般不太方便去确认这些细节,浮点都建议使用字符串来传输。

使用特权

评论回复
地板
jlhgold| | 2016-11-23 12:21 | 只看该作者
我记得有个叫sprintf

使用特权

评论回复
5
ticomi| | 2016-11-26 21:27 | 只看该作者
C语言基本功问题

使用特权

评论回复
6
zdx818| | 2016-12-8 18:11 | 只看该作者
hello_海涛 发表于 2016-11-23 01:05
问题解决了   分享一下:
把float数据区看做一块内存区域,通过指向它的指针强制解释为uchar类型就读出来了 ...

C还可以使用共享数据类型啊,UNION

使用特权

评论回复
7
ayrz2010| | 2017-3-17 14:28 | 只看该作者
zdx818 发表于 2016-12-8 18:11
C还可以使用共享数据类型啊,UNION

这是一种方法,但是实际应用中肯定会出问题的。
modbus的寄存器是16bit的,字节序是一个大问题,必须事先确认Master和Slave端一致才行。

使用特权

评论回复
8
hello_海涛|  楼主 | 2017-8-3 19:01 | 只看该作者
zdx818 发表于 2016-12-8 18:11
C还可以使用共享数据类型啊,UNION

谢谢,这个想法应该不错,这几天我就试试

使用特权

评论回复
9
hello_海涛|  楼主 | 2017-8-3 19:01 | 只看该作者
ayrz2010 发表于 2017-3-17 14:28
这是一种方法,但是实际应用中肯定会出问题的。
modbus的寄存器是16bit的,字节序是一个大问题, ...

使用特权

评论回复
10
hello_海涛|  楼主 | 2017-8-3 19:03 | 只看该作者
aozima 发表于 2016-11-23 09:45
在内存里面,一般都是以 IEEE 754 标准存储,
如果两边都以这个标准,那就直接传输4个字节,
但一般不太方 ...

还是不明白,modbus怎么传输浮点数~~直接传怎么传啊?

使用特权

评论回复
11
进击的生菜| | 2017-8-14 09:25 | 只看该作者
楼主  我现在有个问题  我要把浮点型的数据发送到上位机上  但是上位机只能接收两个字节的数据    浮点型有四个字节   有没有什么办法可以完成发送

使用特权

评论回复
12
hello_海涛|  楼主 | 2018-1-19 12:09 | 只看该作者
进击的生菜 发表于 2017-8-14 09:25
楼主  我现在有个问题  我要把浮点型的数据发送到上位机上  但是上位机只能接收两个字节的数据    浮点型有 ...

你用的PLC吧,我能想到的就一个办法
就是把浮点数转换为整数再上传,当然还要考虑越界问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

77

帖子

0

粉丝