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

[复制链接]
2825|13
 楼主| chest20090909 发表于 2015-10-20 09:08 | 显示全部楼层 |阅读模式
想通过串口传送浮点数,所以想把浮点数转成四个字节依次发送,但不知道浮点数如何转成四字节十六进制数呢
我定义了一个联合体
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 | 显示全部楼层
你不需要用转换器,用联合体就可以了呀。
millenniumm 发表于 2015-10-20 22:32 | 显示全部楼层
pic的编译器用的是24位的float格式,不是标准的32位
 楼主| chest20090909 发表于 2015-10-21 17:29 | 显示全部楼层
JY-DX-JY 发表于 2015-10-20 18:09
你不需要用转换器,用联合体就可以了呀。

我用的就是联合体的啊,但是有一个字节总是00
JY-DX-JY 发表于 2015-10-21 18:07 | 显示全部楼层
为0也没关系,可能就是0.楼上不是说pic的编译器用的是24位的float格式吗?
所以刚好有一个字节是0
yklstudent 发表于 2015-10-21 20:18 | 显示全部楼层
MPLAB平台下可以设置为32位或者24位的
millenniumm 发表于 2015-10-21 22:10 | 显示全部楼层
float格式为前24位是符号位和底数,后8位是指数,pic的格式将底数缩短为16位,也就是说32位转为24位的时候将第三个8位去掉就可以了,楼主的转换结果并没有问题,第四个未使用的字节默认初始化为0
 楼主| chest20090909 发表于 2015-10-22 10:46 | 显示全部楼层
yklstudent 发表于 2015-10-21 20:18
MPLAB平台下可以设置为32位或者24位的

请问在哪里设置呢
 楼主| chest20090909 发表于 2015-10-22 10:47 | 显示全部楼层
millenniumm 发表于 2015-10-21 22:10
float格式为前24位是符号位和底数,后8位是指数,pic的格式将底数缩短为16位,也就是说32位转为24位的时候 ...

那是说按2103顺序发送是没问题的
yklstudent 发表于 2015-10-22 11:27 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| chest20090909 发表于 2015-10-22 12:37 | 显示全部楼层

这里也是吗,我的是MPLAB 8.6

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| chest20090909 发表于 2015-10-22 12:44 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

632

帖子

4

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