如果我們從串口接收到4個字節數據{0x43,0x67,0x80,0x00},如何把這4個字節的數據轉換為float型呢?
直接令float a=0x43678000這是不行的(不信的讀者可以自行驗證),這就是串口通訊當中經常遇到的問題,如果數據傳輸中包括了浮點型數據,在這里我們可以通過共用體或者結構體來解決。
對于共用體:
typedef?union
{
??float?f;
??unsigned?char?s[4];
}Union_test;
f的4個字節和s[4]的4個字節是共用一個區域,如果我們令f=231.5,然后通過VS的監視窗查看s[4]的數值,下面是測試程序:
#include?
//共用體
//float?f;//4個字節
//char?s[4];//4個字節
typedef?union
{
????float?f;
????unsigned?char?s[4];
}Union_test;
typedef?struct?st
{
????float?f1;
}Struct_test;
void?main(void)
{
????float?a=231.5;
????Union_test?x;
????Struct_test?z;
????x.f?=?a;
????z?=?*(Struct_test?*)(&(x.s));
????printf("z=%.2f\r\n",(double)z.f1);
????printf("End?of?this?programme\r\n");
}


我們可以通過下面的函數測試是大端存儲還是小端存儲:
void?test(void)
{
????int?a?=?1;
????unsigned?char?*start=&a;
????if(*start?==?1)
????????printf("小端存儲");
????else?if(*start?==?0)
????????printf("大端存儲");
}
關注公眾號,加星標,回復1024獲取學習資料,每天進步一點點。
聲明:
本號原創、轉載的文章、圖片等版權歸原作者所有,如有侵權,請聯系刪除。
關注、點贊、在看、轉發,支持優質內容!
?