如何把一个float存到一个长度为4的char数组中?
发布日期:2021-06-30 18:46:05
浏览次数:3
分类:技术文章
本文共 1567 字,大约阅读时间需要 5 分钟。
我以前以为它是可以这样的
看代码
#include "stdio.h"int main(void){ float fa = 123.56; char farray[4] = {0}; farray[0] = ((int)fa>> 24)&0xFF; farray[1] = ((int)fa>> 16)&0xFF; farray[2] = ((int)fa>> 8 )&0xFF; farray[3] = ((int)fa>> 0 )&0xFF; printf("%f\n",(float)(farray[0]<<24|farray[1]<<16|farray[2]<<8|farray[3])); return (0);}
输出
123.000000--------------------------------Process exited after 0.02558 seconds with return value 0请按任意键继续. . .
问题
后面的浮点数据被丢失了,丢失的原因应该很容易理解,就是浮点型转换成char存储,小数点后面的东西自然被丢弃了。
所以,我们就存在一个问题,怎么把一个浮点型赋值给 4个char,并且数不丢失呢?
用地址用指针
#include "stdio.h"int main(void){ float fa = 123.56; char farray[4] = {0}; *(float*)farray = fa; printf("%f\n",*(float*)farray); return (0);}
输出
123.559998--------------------------------Process exited after 0.02837 seconds with return value 0请按任意键继续. . .
用共用体
共用体这个是个好东西呀,我们在写单片机的时候,经常有关联性的,就用到这个,修改一个bit,然后里面的整型也跟着修改了。
看代码
#include "stdio.h"union { float fa; char farray[4];}utemp;int main(void){ int i = 0; float ft = 0.0; utemp.fa = (float)123.56; ft = *(float*)utemp.farray; printf("%f\n",ft); return (0);}
输出
123.559998--------------------------------Process exited after 0.02835 seconds with return value 0请按任意键继续. . .
使用memcpy
内存复制和指针的做法应该是一样的思路,既然说到了,还是把它写出来。
看代码#include "stdio.h"#include "string.h"int main(void){ float fa; char farray[4]; float ft; fa = 45.23; memcpy(farray,&fa,sizeof(farray)); memcpy(&ft,&farray,sizeof(farray)); printf("%f\n",ft); return (0);}
看输出
45.230000--------------------------------Process exited after 0.07221 seconds with return value 0请按任意键继续. . .
推荐阅读:
嵌入式Linux
微信扫描二维码,关注我的公众号
转载地址:https://linus.blog.csdn.net/article/details/107421267 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月17日 09时28分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Druid数据源在springboot中的配置及启用查看druid监控页
2019-04-30
MyBatisX
2019-04-30
ssm idea后端接收数据输出在控制台时出现中文乱码
2019-04-30
mybatis-plus逻辑删除数据后依然能够查出该数据
2019-04-30
mybatis-plus代码生成器简易使用
2019-04-30
项目遇到的问题以及解决
2019-04-30
Java判断一组数字是否是等差数列
2019-04-30
用于Web爬虫解决方案的无服务器体系结构
2019-04-30
Gartner:2020年的困境对半导体市场的增长没有障碍
2019-04-30
解读 | 2021年安全管理人员应该学习的5种语言
2019-04-30
干货 | 边缘计算基础架构师指南
2019-04-30
CDN:什么是边缘CDN和虚拟CDN(vCDN)?
2019-04-30
干货 | 如何编写可读性更高的代码?
2019-04-30
如何创建网站:2021年看这份指南就够了
2019-04-30
Open RAN:3W1H法带你了解5G!
2019-04-30
看完这篇文章,别说你不懂Windows 10网络命令
2019-04-30
干货 | 如何为您的应用程序有效地选择正确的数据库
2019-04-30
达梦数据库dm_svc.conf文件配置访问数据库
2019-04-30
达梦odbc配置
2019-04-30