找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10692|回复: 3
打印 上一主题 下一主题
收起左侧

C语言浮点数转十六进制(经验)

[复制链接]
跳转到指定楼层
楼主
ID:371450 发表于 2018-7-14 14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
浮点转十六进制:
/*作用:浮点数---转---十六进制 */
union fnum
{
long int m;
float f;
};
然后需要在引用的函数内声明共用体比如:
union fnum num;
用法:共用体是将 多个成员变量共用一个地址,并且同一时刻只允许1个成员变量被赋值,当某个成员变量修改后,其他的成员立刻改变,
比如:num.f=6.91;那么num.m=0x40DD1EB8;
当num.f=6.0时,另一个成员变量也改变num.m=40C00000
因为,单片机的十进制和十六进制都可以进行直接计算,所以用以上办法就可以实现浮点数转十六进制.
通俗的讲:共用体就像一个容器,成员变量就是不同形状的容器出口,当我们把1个圆形的物体放进去,如果这时我们像要一个方形的物体,那么就从方形的出口将物体取出,就得到方形了,
同理,我们要浮点转十六进制,就把浮点放进共用体(num.f=6.91),然后从整形取出( Rec=num.m )
细节问题:
因为浮点数转成十六进制后,通常都是32位数据,所以我们在取出整形数的时候要 用一个32位的变量(long int,或者u32 ) 去存.
2. 共用体和结构体的区别
  共用体和结构体有下列区别:
  1. 共用体和结构体都是由多个不同的数据类型成员组成,
  但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
  2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了,
  而对于结构体的不同成员赋值是互不影响的。 另外要注意的是,


计算串口接收到的浮点数:
我们通常在接收到串口的数字时, 基本上都是文本类型的数字, 并且是一位一位的文本,
比如6.19就是 ‘6’, ’.’ , ’1’ , ’9’
我们将它重新变为6.19需要进行一下操作:
Arr[]={‘6’,’.’,’1’,’9’}
1. 所有文本类型的数字只有 减零 之后才可以进行计算,否则是文本型.
  Arr[0]-‘0’;
2. 特别注意

sum_num= (float)(arr[6]-'0')+
(float)(arr[8]-'0')/10 +(float)(arr[9]-'0')/ 100;
在计算的时候,小数部分要转换成 小数,然后进行相加,
注意的是 在(float) (arr[8]-'0')/10的时候, 前面要先强制装换成(float)之后 才可以/10,这样才是把 1变成0.1,
如果在/10之前 没有(float)的话,意味着取10的倍数,
如果是 1/10,不加(float),那就等于0;最后相加就等于6.00000;
正确:
3. 注意细节:
成功将Arr[]={‘6’,’.’,’1’,’9’}
组合成sum_num =6.19之后, 在进行判断sum_num时:
if(sum_num == 62.91f) { LED1=0; }
注意这里的62.91后面加f,如果不加会报警告:
:单精度操作数隐式转换为双精度
当if(sum_num == 62.91) { LED1=0; }
这里的sum_num是浮点型,而62.91默认是双精度类型的;
当2个不同类型的变量 相加减时,会将二者都转换成较大一方的类型,
所以 浮点数 和 双精度进行判断时:浮点数会被转换成双精度.所以会报警告,告诉你这里进行了这样的操作.
当if(sum_num == 62.91f) { LED1=0; }这里的62.91f
是将62.91转换成浮点数
浮点数 和 浮点数进行判断 或者 计算,并不会转换成双精度,警告自然没了
下面附上 我自己研发的一些笔记,也都是经验

51单片机-自己整理.doc

102 KB, 下载次数: 56, 下载积分: 黑币 -5

经验笔记

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:371450 发表于 2018-7-14 14:37 | 只看该作者
自己先顶
回复

使用道具 举报

板凳
ID:114583 发表于 2018-9-1 14:00 | 只看该作者
总结的很棒,很受益
回复

使用道具 举报

地板
ID:409831 发表于 2021-1-23 17:41 | 只看该作者
很好,谢谢分享!受教了!!!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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