如何把一個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
請按任意鍵繼續。 。 。