為什麼需要這樣?

#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

請按任意鍵繼續。 。 。