如何把一个float存到一个长度为4的char数组中?

我以前以为它是可以这样的

看代码

#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文章汇总

专辑|程序人生

专辑|C语言


嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF次末节区域配置 201

【实验拓扑】 【实验基本配置】1、按照上图配置相应接口以及OSPF【实验要求】 1、配置Area 1 为NSSA区域2、在R6上配置1条静态路由160.1.60.0/24指向 Null0&#xff0c;并充分发到OSPF中3、将路由器1的ID修改为150.1.100.100【实验分析】次末节区域&#xff08;NSSA&#xff09…

sort和qsort函数

http://blog.csdn.net/morninghapppy/article/details/6703058 http://blog.csdn.net/rns521/article/details/7473558 http://blog.csdn.net/u012209626/article/details/48792049转载于:https://www.cnblogs.com/Emilylice/p/7689099.html

MTK联发科2021 嵌入式C笔试题分析

题目-分割字符串因为题目是考试的同学凭记忆记下来的&#xff0c;没有记得特别仔细&#xff0c;题目只是写了个大概&#xff0c;我也是凭自己的想法来理解。输入aaa;bbb;ccc输出aaa bbb ccc /*--------------------------------------------*/ 输入,hello,hello,,输出hello hel…

java 打印三维数组_Java基础第三天_数组

1.定义一个函数&#xff0c;函数功能是动态提取int[]中元素的最大值。2.定义一个函数&#xff0c;从数组中查询指定的元素首次出现的位置。3.定义函数&#xff0c;完成冒泡排序&#xff0c;大数下沉。4.折半查找。5.阐述6.定义一个函数&#xff0c;实现矩阵的转置.arr[i][j] a…

DEVICE_ATTR设置0777引发血案

这个宏我们在内核里面使用非常频繁&#xff0c;这个宏的作用可以抛出sys设备节点给用户使用。用户可以读写sys/class下面的文件节点&#xff0c;以达到控制内核驱动的功效。比如&#xff0c;像这样的设备节点weiqifa:/sys/class/zigbee/onoff $ ls gpio_en power subsystem uev…

试用Mono Beta 1.0

下载地址: http://www.go-mono.com/download.html测试环境:Windows XP、Windows 2003测试代码:F:\HelloWorld.csusing System;namespace mynamespace { public class HelloWorld { public static void Main(string [] args) { Console.WriteLine("hello, world"…

线性链表java实现_java实现线性单链表

/**** 线性单链表*/public class LinkedLinearList {private Node head;private int length;// 实际长度/*** 初始化顺序表,长度为length*/public LinkedLinearList() {length 0;head new Node(0, null);length;}/*** 将index位置赋值为c&#xff0c;会覆盖掉原值** param in…

「任性」的C语言之父:因拒付论文装订费错失博士学位,论文52年后重见天日...

他是C语言之父、1983年图灵奖得主&#xff0c;还是Unix的关键开发者。然而&#xff0c;他却因为「任性」没有拿到博士学位&#xff0c;而且当年写的博士论文一丢就是半个世纪。如今&#xff0c;这一神秘的博士论文终于重见天日。很多人可能听说过 Dennis Ritchie 这个人。上世纪…

CS224n笔记3 高级词向量表示

本文转自&#xff1a;http://www.hankcs.com/nlp/cs224n-advanced-word-vector-representations.html 这节课从传统的基于计数的全局方法出发&#xff0c;过渡到结合两者优势的GloVe&#xff0c;并介绍了词向量的调参与评测方法。 复习&#xff1a;word2vec的主要思路 遍历整个…

C# 2.0对现有语法的改进

C# 2.0对现有语法的改进 原注&#xff1a;lover_P出处&#xff1a; [自序] 尽管Microsoft Visual Studio .NET 2005&#xff08;过去好像叫Visual Studio .NET 2004&#xff09;一再推迟其发布日期&#xff0c;但广大开发者对其的猜测以及各种媒体对其各方面的“曝光”也似乎已…

一个java类运行时从哪个方法开始_Java的应用程序是从类中的

【填空题】还不走,车来了。【填空题】进路是 运行时所经由的路径。【单选题】()是仿照法国巴黎圣母院设计建造的:【简答题】结合你学习的感受,你认为会计核算程序三大会计要素顺序可以颠倒吗?【填空题】一往无前马当先。【听力题】【判断题】企业所得税是直接税,其纳税人与负税…

C# 第一章 笔记

目录&#xff1a;硬盘 - 工具软件 - 编程开发 - Visual Studio软件&#xff1a;序列号、安装包、魔方虚拟光驱(win7) Visual Studio 2013.exeVisual Studio 2013.msiVisual Studio 2013.iso光盘 -> 光驱光盘镜像文件 -> 虚拟光驱 Win7安装会警告&#xff1a;您当前系统IE…

一粒老鼠屎

我又老生常谈了。本来很久都不去CSDN看文档的评论了。但是今天忍不住又瞄到了几眼&#xff0c;一看那些不屑的&#xff0c;骂人的腔调的评论&#xff0c;就心里堵得难受。CSDN的blog现在可想而知&#xff0c;当应很热闹。但透明和曾毅还有我都没有去用它的blog&#xff0c;我想…

我在深圳,但是家里托人在老家找了一份工作

最近&#xff0c;在微信公众号后台收到一份读者的留言&#xff0c;而且这位读者也是我们GX的&#xff0c;而且更幸运的是&#xff0c;跟我是一个地方的。她是疑惑如下~前辈你好~ 今天看到最新一篇有关读书的推文发现同是HC老乡&#xff0c;斗胆向您请教一些问题&#xff0c;有点…

Django之项目搭建和配置总结(一)

安装和创建虚拟环境 参考&#xff1a;linux系统下Python虚拟环境的安装和使用安装Django包 先进入虚拟环境&#xff0c;在联网下执行&#xff1a;pip install django1.8.7 1.8.7表示django的版本&#xff0c;如果不指定&#xff0c;会默认安装最新版的django。包会被安装到/usr…

java长连接例子_java实现长连接

();public Client(String serverIp, int port) {this.serverIpserverIp;this.portport;}public void start() throws UnknownHostException, IOException {if(running)return;socket new Socket(serverIp,port);System.out.println("本地端口&#xff1a;"socket.ge…

怎么把一个bool数组转成char?

这个是在知乎上看到的问题&#xff0c;分享给大家&#xff0c;如果有不同的答案&#xff0c;欢迎评论回复。知乎惯例谢邀人在厕所&#xff0c;刚刚蹲下因为最近都流行长文&#xff0c;但是作为日更而且更喜欢表达自己看法的我&#xff0c;力争文章是自己想发的&#xff0c;而且…

日本語勉強資源

ウェブ頁注音 http://www.hiragana.jp/ &#xff08;看新闻学背单词容易多了&#xff09;通訳 http://www.excite.co.jp &#xff08;单词&#xff0f;句子&#xff0f;网页翻译&#xff09;

mysql的高阶用法_MySQL的经典用法(十四)-高级优化

mysql的经典用法(十四)----高级优化基于/application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cnf二次优化【删除--如果不使用主从同步】注释&#xff0c;去除无用日志文件# log-binmysql-bin# binlog_formatmixed【修改链接】# 最大链接值从100增加到512…

Kotlin——初级篇(二):变量、常量、注释

在Kotlin中的变量、常量以及注释多多少少和Java语言是有着不同之处的。不管是变量、常量的定义方式&#xff0c;还是注释的使用。下面详细的介绍Kotlin中的变量、常量、注释的使用。以及和Java的对比。 如果您还没有搭建环境和不了解Kotlin的&#xff0c;请看我的上一篇博文Kot…