OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5606|回复: 13

如何把4字节16进制数转成10进制浮点型数据

[复制链接]

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
发表于 2021-3-17 12:13:34 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 爱问知识人 于 2021-3-17 12:15 编辑

大佬们好,最近做一个工装,买了个带485通信得电压表,通信返回得数据是:41 AB 09 0C ,例程里转换成浮点型约为21.38v,
现在我请问,如何在单片机中处理这个数据,得到这个电压值。谢谢!
百度了,也没看明白。

最佳答案

查看完整内容[请看2#楼]

#include typedef union{ float i; unsigned char a[4]; }myfloat; int main() { /* 我的第一个 C 程序 */ myfloat t; t.i = 21.379417; printf("0x%02X 0x%02X 0x%02X 0x%02X\n",t.a[0],t.a[1],t.a[2],t.a[3]); return 0; } 运行这个程序看看打印出来的数据就知道了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6677
金钱
6677
注册时间
2015-8-25
在线时间
1036 小时
发表于 2021-3-17 12:13:35 | 显示全部楼层
爱问知识人 发表于 2021-3-17 12:54
行,由于C学的比较浅,您刚才说的联合体  取指针,没有接触过,平时用到的都是那些简单的语句。我按照你 ...

#include <stdio.h>
typedef union{
        float i;
        unsigned char a[4];
}myfloat;

int main()
{
   /* 我的第一个 C 程序 */
        myfloat t;
        t.i = 21.379417;
   printf("0x%02X 0x%02X 0x%02X 0x%02X\n",t.a[0],t.a[1],t.a[2],t.a[3]);
   
   return 0;
}

运行这个程序看看打印出来的数据就知道了
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2019-9-4
在线时间
915 小时
发表于 2021-3-17 12:23:10 | 显示全部楼层
这。。。起码给两组数据才能看得出规律吧
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2021-3-17 12:40:32 | 显示全部楼层
41AB090C=21.379417  你联合体 取指针都可以
回复

使用道具 举报

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
 楼主| 发表于 2021-3-17 12:48:03 | 显示全部楼层
nashui_sx 发表于 2021-3-17 12:40
41AB090C=21.379417  你联合体 取指针都可以

不会呀,大佬,能不能贴码给我,谢谢
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2021-3-17 12:50:06 | 显示全部楼层
爱问知识人 发表于 2021-3-17 12:48
不会呀,大佬,能不能贴码给我,谢谢

怎么说呢,思路都给你了不会百度学呀  一天搞不定再要代码吧,这才是正确的解决问题思路
回复

使用道具 举报

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
 楼主| 发表于 2021-3-17 12:54:42 | 显示全部楼层
nashui_sx 发表于 2021-3-17 12:50
怎么说呢,思路都给你了不会百度学呀  一天搞不定再要代码吧,这才是正确的解决问题思路

行,由于C学的比较浅,您刚才说的联合体  取指针,没有接触过,平时用到的都是那些简单的语句。我按照你说的,尝试学习一下。
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-3-17 13:14:10 | 显示全部楼层
要先看协议里面的数据位代表的是什么,这个原始数据输出来有协议格式的,然后才是数据格式的转换
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-11-20
在线时间
12 小时
发表于 2021-3-17 13:40:59 | 显示全部楼层
IEEE 754格式
回复

使用道具 举报

4

主题

80

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1060
金钱
1060
注册时间
2020-8-4
在线时间
248 小时
发表于 2021-3-17 14:13:24 | 显示全部楼层
https://blog.csdn.net/whzhaochao/article/details/12885875
看一下float数据的存储结构就知道了
回复

使用道具 举报

0

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1161
金钱
1161
注册时间
2013-8-23
在线时间
165 小时
发表于 2021-3-18 08:20:24 | 显示全部楼层
union HEXtoF {
    u32 u32;
    u8 u8[4];
    float f;
};
union HEXtoF hex2float;

for (i=0;i<4;i++) hex2float.u8[i] = rxdata[i];
printf("浮点数的值: %.4f\r\n",hex2float.f);
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4483
金钱
4483
注册时间
2018-5-14
在线时间
960 小时
发表于 2021-3-18 10:32:03 | 显示全部楼层
uint32 Float2U32(float data)
{
    uint32 *Tr_Data;
    Tr_Data=((uint32 *)(&data));
    return *Tr_Data;
}
float U322Float(uint32 data)
{
    float *Tr_Data;
    Tr_Data=((float *)(&data));
    return *Tr_Data;
}
回复

使用道具 举报

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
 楼主| 发表于 2021-3-22 17:22:35 | 显示全部楼层
姚先起 发表于 2021-3-18 10:32
uint32 Float2U32(float data)
{
    uint32 *Tr_Data;

谢谢,我调试看看啊
回复

使用道具 举报

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
 楼主| 发表于 2021-3-22 17:22:56 | 显示全部楼层
01ddd 发表于 2021-3-18 08:20
union HEXtoF {
    u32 u32;
    u8 u8[4];

谢谢,我调试看看啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 06:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表