我們知道,浮點型float數據類型占用4個字節,實際上在內存當中a = 0x43678000,只是嵌入式芯片訪問a時,知道a是浮點型數據,所以一次性讀取4個字節,而且也按照浮點型的數據表示規定,將a轉換為十進制的可讀數據231.5。
如果我們從串口接收到4個字節數據{0x43,0x67,0x80,0x00},如何把這4個字節的數據轉換為float型呢?
直接令float a = 0x43678000這是不行的(不信的讀者可以自行驗證),這就是串口通訊當中經常遇到的問題,如果數據傳輸中包括了浮點型數據,在這里我們可以通過共用體或者結構體來解決。
對于共用體:
f 的4個字節和s[4]的4個字節是共用一個區域,如果我們令f = 231.5,然后通過監視窗查看s[4]的數值,下面是測試程序:
監視結果如下所示:
我們同樣適用結構體做了相同的實驗,將數組s[4]={0x00,0x80,0x67,0x43}的首地址s[0]強制轉換賦值給結構體z,最后打印輸出的結果也是231.5這里我們看到原本應該是0x4367_8000的數據實際存儲的時候變成了00H 80H 67H 43H,這是因為計算機系統使用了小端存儲。
什么是小端存儲呢?
我們都知道,對于一個超過一個字節的數據,其在計算機中的存儲需要跨越字節。某些機器選擇在存儲器中按照從最低為有效字節到最高有效字節的順序存儲對象,而另一些機器則按照從最高為有效字節到到最低為有效字節的順序存儲,前一種存儲方式被稱為小端存儲,后一種方式被稱為大端存儲。
舉個例子,對于十六進制數0x01234567,其字節的存儲順序便依賴于機器,如下:
我們可以通過下面的函數測試是大端存儲還是小端存儲:
審核編輯:湯梓紅
-
嵌入式
+關注
關注
5092文章
19177瀏覽量
307672 -
數據傳輸
+關注
關注
9文章
1952瀏覽量
64853 -
內存
+關注
關注
8文章
3055瀏覽量
74329 -
串口
+關注
關注
14文章
1557瀏覽量
77041 -
結構體
+關注
關注
1文章
130瀏覽量
10872
原文標題:干貨 | 串口數據傳輸中的共用體和結構體如何轉換?
文章出處:【微信號:電子工程世界,微信公眾號:電子工程世界】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論