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

看代码

#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

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

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

  1. 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。

    问: /** 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  2. 两数之和, 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。

    两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那两个整数,并返回它们的数组下标. 可以假设每种输入只会对应一个答案.但是,数组 ...

  3. 给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素。给出你算法的时间复杂性

    给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素.给出你算法的时间复杂性. 算法 SECOND_MAX 输入:含有n个元素的数组A,不妨设 n=2^k 输出:该数组中的第二个最大元素 ( ...

  4. 《c primer pius》第六章第14题,发现网上好多都有问题,编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中

    编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符.回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按 ...

  5. 案例:从键盘输入本组学员的人数,和本组学员的姓名,用数组存储姓名,然后再从键盘输入一个姓名,查找它是否在之前的数组中,如果存在,就显示它的下标

    package com.atguigu.z_homework;import java.util.Arrays; import java.util.Scanner;/* 案例:从键盘输入本组学员的人数, ...

  6. 编写一个程序,从10亿个数字的数组中找出100个最大的数字

    本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...

  7. js小白操作:判断空值、判断数组最大最小值、判断map是否为空、字符串转int、取float型小数点后两位数、判断数组中是否包含某个对象

    js小白操作:判断空值.判断数组最大最小值.判断map为空的情况.字符串转int Js基础操作 一.判断空值 undefined 和 null 二.判断map是否为空 三.取数组最大最小值 1.使用 ...

  8. python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...

    在pylab程序中(也可能是一个matlab程序)我有一个代表距离的numpy数组:d [t]是时间t的距离(我的数据的时间跨度是len(d)时间单位) . 我感兴趣的事件是当距离低于某个阈值时,我想 ...

  9. java8 list切片_java中怎么从一个数组中截取一定长度的元素放到新数组中

    展开全部 可以利用substring(int beginIndex, int endIndex)函数截取固定长度片段. 具体示例代码如下: public class woo { public stat ...

最新文章

  1. GridBagLayout布局管理器应用详解
  2. npoi 所有列调整为一页_必能用到,一页PPT中想放超多图片怎么办?
  3. 用visio反向工程画oracle数据库表的结构图
  4. “const char*”类型的值不能用于初始化“char”类型的实体
  5. 谭浩强c语言入门prd,完整C语言谭浩强学习笔记.docx
  6. 计算机win7截长屏,电脑截长图【应对法子】
  7. MFC做一个简易的登录界面
  8. uniapp开发小程序-获取支付宝小程序用户手机号功能
  9. 用例图之参与者、用例间的四种关系
  10. python编写水仙花数(超完全数字不变数、自恋数、自幂数、阿姆斯特朗数)
  11. SpringCloud-网关统一配置跨域
  12. Python验证哥德巴赫猜想,并返回数组
  13. 寻找“安全圈锦鲤” | 4万粉丝,独宠你一人(倒计时2天)
  14. wox开机自启_快速启动神器 Wox
  15. 基于沙猫群优化算法的函数寻优算法
  16. python imageio安装_imageio.ffmpeg.download()需要安装不同的imageio,并且imageio不会安装其他版本...
  17. 基于php+mysql的校园木本植物检索查询统
  18. 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)
  19. Android使用mob实现第三方登录(Facebook、Twitter)
  20. Android Preference详解

热门文章

  1. struts2.1.6教程二、struts.xml配置及例程
  2. 使用C语言扩展Python(四)
  3. 我们应该学习什么 java、C#还是C++(VC)
  4. 开始→运行→输入的命令集锦( 菜鸟必读)
  5. Linux直接与编译安装Vsftpd服务器
  6. 如何在C#里实现端口监视呢?
  7. JAVA中protected的作用
  8. 银联pos小票word模板_商家pos机刷卡必须知道的知识
  9. 硬盘显示容量和实际容量不符合_买移动固态硬盘纠结大半天?花2分钟看完这篇,购买时不再被坑...
  10. Python的Django框架中forms表单类的使用方法详解