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

[复制链接]
2773|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
ticomi 发表于 2016-11-26 21:27 | 显示全部楼层
C语言基本功问题
zdx818 发表于 2016-12-8 18:11 | 显示全部楼层
hello_海涛 发表于 2016-11-23 01:05
问题解决了   分享一下:
把float数据区看做一块内存区域,通过指向它的指针强制解释为uchar类型就读出来了 ...

C还可以使用共享数据类型啊,UNION
ayrz2010 发表于 2017-3-17 14:28 | 显示全部楼层
zdx818 发表于 2016-12-8 18:11
C还可以使用共享数据类型啊,UNION

这是一种方法,但是实际应用中肯定会出问题的。
modbus的寄存器是16bit的,字节序是一个大问题,必须事先确认Master和Slave端一致才行。
 楼主| hello_海涛 发表于 2017-8-3 19:01 | 显示全部楼层
zdx818 发表于 2016-12-8 18:11
C还可以使用共享数据类型啊,UNION

谢谢,这个想法应该不错,这几天我就试试
 楼主| hello_海涛 发表于 2017-8-3 19:01 | 显示全部楼层
ayrz2010 发表于 2017-3-17 14:28
这是一种方法,但是实际应用中肯定会出问题的。
modbus的寄存器是16bit的,字节序是一个大问题, ...

 楼主| hello_海涛 发表于 2017-8-3 19:03 | 显示全部楼层
aozima 发表于 2016-11-23 09:45
在内存里面,一般都是以 IEEE 754 标准存储,
如果两边都以这个标准,那就直接传输4个字节,
但一般不太方 ...

还是不明白,modbus怎么传输浮点数~~直接传怎么传啊?
进击的生菜 发表于 2017-8-14 09:25 | 显示全部楼层
楼主  我现在有个问题  我要把浮点型的数据发送到上位机上  但是上位机只能接收两个字节的数据    浮点型有四个字节   有没有什么办法可以完成发送
 楼主| hello_海涛 发表于 2018-1-19 12:09 | 显示全部楼层
进击的生菜 发表于 2017-8-14 09:25
楼主  我现在有个问题  我要把浮点型的数据发送到上位机上  但是上位机只能接收两个字节的数据    浮点型有 ...

你用的PLC吧,我能想到的就一个办法
就是把浮点数转换为整数再上传,当然还要考虑越界问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

77

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部