如何把一个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
微信扫描二维码,关注我的公众号
如何把一个float存到一个长度为4的char数组中?相关推荐
- 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
问: /** 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...
- 两数之和, 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 可以假设每种输入只会对应一个答案.但是,数组 ...
- 给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素。给出你算法的时间复杂性
给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素.给出你算法的时间复杂性. 算法 SECOND_MAX 输入:含有n个元素的数组A,不妨设 n=2^k 输出:该数组中的第二个最大元素 ( ...
- 《c primer pius》第六章第14题,发现网上好多都有问题,编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中
编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符.回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按 ...
- 案例:从键盘输入本组学员的人数,和本组学员的姓名,用数组存储姓名,然后再从键盘输入一个姓名,查找它是否在之前的数组中,如果存在,就显示它的下标
package com.atguigu.z_homework;import java.util.Arrays; import java.util.Scanner;/* 案例:从键盘输入本组学员的人数, ...
- 编写一个程序,从10亿个数字的数组中找出100个最大的数字
本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...
- js小白操作:判断空值、判断数组最大最小值、判断map是否为空、字符串转int、取float型小数点后两位数、判断数组中是否包含某个对象
js小白操作:判断空值.判断数组最大最小值.判断map为空的情况.字符串转int Js基础操作 一.判断空值 undefined 和 null 二.判断map是否为空 三.取数组最大最小值 1.使用 ...
- python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...
在pylab程序中(也可能是一个matlab程序)我有一个代表距离的numpy数组:d [t]是时间t的距离(我的数据的时间跨度是len(d)时间单位) . 我感兴趣的事件是当距离低于某个阈值时,我想 ...
- java8 list切片_java中怎么从一个数组中截取一定长度的元素放到新数组中
展开全部 可以利用substring(int beginIndex, int endIndex)函数截取固定长度片段. 具体示例代码如下: public class woo { public stat ...
最新文章
- GridBagLayout布局管理器应用详解
- npoi 所有列调整为一页_必能用到,一页PPT中想放超多图片怎么办?
- 用visio反向工程画oracle数据库表的结构图
- “const char*”类型的值不能用于初始化“char”类型的实体
- 谭浩强c语言入门prd,完整C语言谭浩强学习笔记.docx
- 计算机win7截长屏,电脑截长图【应对法子】
- MFC做一个简易的登录界面
- uniapp开发小程序-获取支付宝小程序用户手机号功能
- 用例图之参与者、用例间的四种关系
- python编写水仙花数(超完全数字不变数、自恋数、自幂数、阿姆斯特朗数)
- SpringCloud-网关统一配置跨域
- Python验证哥德巴赫猜想,并返回数组
- 寻找“安全圈锦鲤” | 4万粉丝,独宠你一人(倒计时2天)
- wox开机自启_快速启动神器 Wox
- 基于沙猫群优化算法的函数寻优算法
- python imageio安装_imageio.ffmpeg.download()需要安装不同的imageio,并且imageio不会安装其他版本...
- 基于php+mysql的校园木本植物检索查询统
- 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)
- Android使用mob实现第三方登录(Facebook、Twitter)
- Android Preference详解
热门文章
- struts2.1.6教程二、struts.xml配置及例程
- 使用C语言扩展Python(四)
- 我们应该学习什么 java、C#还是C++(VC)
- 开始→运行→输入的命令集锦( 菜鸟必读)
- Linux直接与编译安装Vsftpd服务器
- 如何在C#里实现端口监视呢?
- JAVA中protected的作用
- 银联pos小票word模板_商家pos机刷卡必须知道的知识
- 硬盘显示容量和实际容量不符合_买移动固态硬盘纠结大半天?花2分钟看完这篇,购买时不再被坑...
- Python的Django框架中forms表单类的使用方法详解