打印

请教浮点数如何转成四字节十六进制发送

[复制链接]
2432|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
想通过串口传送浮点数,所以想把浮点数转成四个字节依次发送,但不知道浮点数如何转成四字节十六进制数呢
我定义了一个联合体
union
{
        float f;
        uchar d[4];
}fd;


fd.f=54.7;
然后依次发送d[0],d[1],d[2],d[3]
用转换器软件查得54.7的十六进制是42 5A CC CD

但用仿真软件得到的是 CD 5A 42 00


如果按d[2],d[1],d[0],d[3]来传送,得到42 5A CD 00,为什么最后一字节是00呢


用转换软件查看42 5A CD 00的浮点数是54.700195


问题出在什么地方呢


沙发
JY-DX-JY| | 2015-10-20 13:24 | 只看该作者
你这个转换器和PIC的C编译器不一定一致。

使用特权

评论回复
板凳
chest20090909|  楼主 | 2015-10-20 17:27 | 只看该作者
JY-DX-JY 发表于 2015-10-20 13:24
你这个转换器和PIC的C编译器不一定一致。

请问哪种转换器的存储顺序和PICC编译器一致呢

使用特权

评论回复
地板
JY-DX-JY| | 2015-10-20 18:09 | 只看该作者
你不需要用转换器,用联合体就可以了呀。

使用特权

评论回复
5
millenniumm| | 2015-10-20 22:32 | 只看该作者
pic的编译器用的是24位的float格式,不是标准的32位

使用特权

评论回复
6
chest20090909|  楼主 | 2015-10-21 17:29 | 只看该作者
JY-DX-JY 发表于 2015-10-20 18:09
你不需要用转换器,用联合体就可以了呀。

我用的就是联合体的啊,但是有一个字节总是00

使用特权

评论回复
7
JY-DX-JY| | 2015-10-21 18:07 | 只看该作者
为0也没关系,可能就是0.楼上不是说pic的编译器用的是24位的float格式吗?
所以刚好有一个字节是0

使用特权

评论回复
8
yklstudent| | 2015-10-21 20:18 | 只看该作者
MPLAB平台下可以设置为32位或者24位的

使用特权

评论回复
9
millenniumm| | 2015-10-21 22:10 | 只看该作者
float格式为前24位是符号位和底数,后8位是指数,pic的格式将底数缩短为16位,也就是说32位转为24位的时候将第三个8位去掉就可以了,楼主的转换结果并没有问题,第四个未使用的字节默认初始化为0

使用特权

评论回复
10
chest20090909|  楼主 | 2015-10-22 10:46 | 只看该作者
yklstudent 发表于 2015-10-21 20:18
MPLAB平台下可以设置为32位或者24位的

请问在哪里设置呢

使用特权

评论回复
11
chest20090909|  楼主 | 2015-10-22 10:47 | 只看该作者
millenniumm 发表于 2015-10-21 22:10
float格式为前24位是符号位和底数,后8位是指数,pic的格式将底数缩短为16位,也就是说32位转为24位的时候 ...

那是说按2103顺序发送是没问题的

使用特权

评论回复
12
yklstudent| | 2015-10-22 11:27 | 只看该作者


使用特权

评论回复
13
chest20090909|  楼主 | 2015-10-22 12:37 | 只看该作者

这里也是吗,我的是MPLAB 8.6

使用特权

评论回复
14
chest20090909|  楼主 | 2015-10-22 12:44 | 只看该作者

可以了,按d[0],d[1],d[2],d[3]发送的,调换下发送顺序就可以和转换软件的值对应上了

使用特权

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

本版积分规则

121

主题

632

帖子

4

粉丝