当前位置:首页 » 编程语言 » c语言浮点转字节数组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言浮点转字节数组

发布时间: 2023-02-08 05:38:25

c语言 数组类型转换,怎样将一个float类型的数组转换成字符(串)数组

不使用sprintf,使用求余%,且代码少

#include<stdio.h>
#include<math.h>

//4个二进制位转成一个16进制位的字符(3个二进制位转成一个8进制位的字符)(十进制0-9转成字符)
(unsignedcharnum)
{
switch(num)
{
case0:return'0';
case1:return'1';
case2:return'2';
case3:return'3';
case4:return'4';
case5:return'5';
case6:return'6';
case7:return'7';
case8:return'8';
case9:return'9';
case10:return'A';
case11:return'B';
case12:return'C';
case13:return'D';
case14:return'E';
case15:return'F';
default:return'X';
}
}

//字符串反转
voidReverseString(char*Source,intBegin,intEnd)
{
inti;
charTemp;
for(i=0;i<((End-Begin+1)/2);++i)
{
Temp=Source[Begin+i];
Source[Begin+i]=Source[End-i];
Source[End-i]=Temp;
}
}

//比较float类型大小
intCompareFloat(floatA,floatB)
{
if((A<B)
&&(fabs(A-B)>1e-6f))
{
return-1;
}
elseif((A>B)
&&(fabs(A-B)>1e-6f))
{
return1;
}
else
{
return0;
}
}
//float转字符串(十进制)(Precision是小数精度)
voidFloatToStringDecimal(floatFloat,char*Destination,unsignedintPrecision)
{
if(CompareFloat(Float,0)!=0)
{
//将小数移到整数位
floatTemp=Float*powf(10.0f,(float)Precision);
//负数转成正数,否则不能使用迷之转换
if(CompareFloat(Temp,0)==-1)
{
Temp=-Temp;
}
floatIntInFloat=0.0;
modff(Temp,&IntInFloat);
inti=0;
unsignedcharnum;
for(i=0;(i<(int)Precision)&&(CompareFloat(IntInFloat,0)!=0);++i)
{
//float转成unsignedint
//迷之转换(因为不知道内部如何实现,所以叫迷之转换)
num=(unsignedchar)((unsignedint)IntInFloat%10);
Destination[i]=(num);
IntInFloat/=10;
modff(IntInFloat,&IntInFloat);
}
if(Precision!=0)
{
Destination[i]='.';
++i;
}
while(CompareFloat(IntInFloat,0)!=0)
{
num=(unsignedchar)((unsignedint)IntInFloat%10);
Destination[i]=(num);
IntInFloat/=10;
modff(IntInFloat,&IntInFloat);
++i;
}
if(CompareFloat(Float,0)==-1)
{
Destination[i]='-';
++i;
}
ReverseString(Destination,0,i-1);
Destination[i]='';
return;
}
else
{
Destination[0]='0';
Destination[1]='';
return;
}
}

然后是测试

//测试代码
fprintf(FP_BaseZeroth,"测试对象:voidFloatToStringDecimal(floatFloat,char*Destination,unsignedintPrecision) ");
fprintf(FP_BaseZeroth,"测试输入:0;123;123.456;-123;-123.456;1.23456e10f; ");
fprintf(FP_BaseZeroth,"预测输出:0;123;123.456;-123;-123.456;有效数字部分确定 ");
fprintf(FP_BaseZeroth,"实际输出:");
floatA[6]={0.0f,123.0f,123.456f,-123.0f,-123.456f,1.23456e10f};
charDes[100];
FloatToStringDecimal(A[0],Des,0);
fprintf(FP_BaseZeroth,"%s;",Des);
FloatToStringDecimal(A[1],Des,0);
fprintf(FP_BaseZeroth,"%s;",Des);
FloatToStringDecimal(A[2],Des,3);
fprintf(FP_BaseZeroth,"%s;",Des);
FloatToStringDecimal(A[3],Des,0);
fprintf(FP_BaseZeroth,"%s;",Des);
FloatToStringDecimal(A[4],Des,3);
fprintf(FP_BaseZeroth,"%s;",Des);
FloatToStringDecimal(A[5],Des,3);
fprintf(FP_BaseZeroth,"%s;",Des);
fprintf(FP_BaseZeroth," ");

测试结果

⑵ c语言中如何将10进制的浮点数转化为16进制存放到char型数组中

本人在串口通信中就用到这个,讲浮点数(不谈进制)转化为字符型(楼主所谓的16进制)放入char字符数组。

更精确的说应该是将浮点数,以字节形式放入字节数组(不是char数组哦,因为char是有符号的),用以后续的通信传输(大多数的应用吧)。

我用的基本方法是union(联合)
代码如下:

union UFLOAT
{
float f; // 4个字节浮点型变量
byte by4[4]; // 字节数组,元素为4
}

由于用了union,上面定义的变量占用4字节的内存,也就是说f和by4是共用这4字节内存的。对浮点的转化变得异常简单。

float fNum=100.0; // 待操作的浮点数
byte byBuf[400]; // 可容纳100个转换后的浮点数的整型数组
unsigned int j=0; // 下面用作byBuf的游标
UFLOAT uf; // 用以快速转换的自定义UFLOAT变量
// ...一些运算
// 下面这段代码将fNum转成4字节插入到byBuf中

uf.f=fNum; // 将要转换的浮点数放入UFLOAT变量,此时uf.by[]数组也被赋值了,因为内存是共用的
for (unsigned int i=0;i<4;i++)
{
byBuf[j++]=uf.by4[i];
}

⑶ C语言怎么将浮点变量存入字符数组

如果是在PC上,直接使用sprintf函数就可以实现:

#include<stdio.h>
voidsprint(floatn,char*reChar,intzsize,intxsize,intflag)//功能将浮点数n转成字符串,保存到以reChar地址开头的字符数组中(可实现插入)
//flag=0:直接转换浮点数到指定地址flag=1:将转换的浮点数插入到指定地址位置
//zsize:n整数部分最大可能的位数。xsize:n小数部分最大可能的位数+1(包含小数点)。
//reChar:用于返回处理后的字符串
{

intz,x,i=0,j=0;
chara[1+zsize+xsize];

n=n+0.00001;//+0.00001避免浮点数精度丢失,可根据你传感器输出实际数字位数修改,不要超出类型范围
z=(int)n;
x=(int)((n-z)*10);//取小数数字,最大1位小数*102位*1003位*1000需要自行修改你也可以自己写10次方函数利用xsize运算

while(x/10!=0)
{
a[i++]=x%10+'0';
x=x/10;
}
a[i++]=x+'0';
a[i++]='.';
while(z/10!=0)
{
a[i++]=z%10+'0';
z=z/10;
}
a[i++]=z+'0';
a[i]=0;

for(i=zsize+xsize-1;i>=0;i--)
reChar[j++]=a[i];
if(flag==0)
reChar[j]=0;
}
intmain()
{
floatn=199.7;
chara[]="HEHDT,#####,T";
charb[6];
sprint(n,b,3,2,0);//调用方法一,直接转换
sprint(n,a+6,3,2,1);//调用方法二,转换并插入
printf("浮点数转字符串为:%s ",b);
printf("总字符串为:%s ",a);
return0;
}

⑷ objective-c中float类型变量和byte数组之间相互转换,怎么实现,求指导

不是很懂OC,C语言里 是通过联合体方式,或者内存拷贝

比如 float a = 1000.1f ;
int len = sizeof(float);
byte* pBuf = new byte[len];
memcpy(&a,pBuf,len);

或者

union
{
float num ;

byte buf[sizeof(float)];
}

⑸ c语言如何将浮点型数据转换为数组

库函数gcvt可以完成此任务,它返回转换后的字符串的地址。如:
//#include
"stdafx.h"//If
the
vc++6.0,
with
this
line.
#include "stdio.h"
#include "stdlib.h"
int main(void){
double x=34.743829109;
char a[19];
printf("%s\n",gcvt(x,5,a));//5确定有效数字长度且据其后数字四舍五入
return 0;
}

⑹ float和4字节char互转

按照 IEEE754 标准的规定, float 类型实际用4字节存储,比如 50.0 对应4字节 0x00 0x00 0x48 0x42 (注意大小端),用C语言转换只要 memcpy 就行。

上面打印结果就是 50.000 。如果要把 float 转换为4字节数组同样可以用memcpy。
在 python 中的方法如下:使用 struct.pack 和 struct.unpack 即可。

⑺ c语言如何将浮点型数据转换为数组

你好:
转换后的数据经过处理之后,高位数据/10和%10可以直接显示在LCD12864上,但是低位数据(也就是小数部分)需要取数组值来处理。
因为现在在外边,手机又无法上程序,你可以到我的网络空间里找找DS18B20的液晶显示程序,还带温度报警,有不懂的地方可以提出一起交流。
希望我的回答能帮助到你。