當前位置:首頁 » 編程語言 » 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的液晶顯示程序,還帶溫度報警,有不懂的地方可以提出一起交流。
希望我的回答能幫助到你。