0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

串口數據傳輸中的共用體和結構體如何轉換?

h1654155149.6853 ? 來源:電子工程世界 ? 2023-03-14 16:53 ? 次閱讀

我們知道,浮點型float數據類型占用4個字節(jié),實際上在內存當中a = 0x43678000,只是嵌入式芯片訪問a時,知道a是浮點型數據,所以一次性讀取4個字節(jié),而且也按照浮點型的數據表示規(guī)定,將a轉換為十進制的可讀數據231.5。

如果我們從串口接收到4個字節(jié)數據{0x43,0x67,0x80,0x00},如何把這4個字節(jié)的數據轉換為float型呢?

直接令float a = 0x43678000這是不行的(不信的讀者可以自行驗證),這就是串口通訊當中經常遇到的問題,如果數據傳輸中包括了浮點型數據,在這里我們可以通過共用體或者結構體來解決。

對于共用體:

354554a4-c23a-11ed-bfe3-dac502259ad0.png

f 的4個字節(jié)和s[4]的4個字節(jié)是共用一個區(qū)域,如果我們令f = 231.5,然后通過監(jiān)視窗查看s[4]的數值,下面是測試程序:

3569ed6e-c23a-11ed-bfe3-dac502259ad0.png

監(jiān)視結果如下所示:

357e1ff0-c23a-11ed-bfe3-dac502259ad0.png

我們同樣適用結構體做了相同的實驗,將數組s[4]={0x00,0x80,0x67,0x43}的首地址s[0]強制轉換賦值給結構體z,最后打印輸出的結果也是231.5這里我們看到原本應該是0x4367_8000的數據實際存儲的時候變成了00H 80H 67H 43H,這是因為計算機系統(tǒng)使用了小端存儲。

什么是小端存儲呢?

我們都知道,對于一個超過一個字節(jié)的數據,其在計算機中的存儲需要跨越字節(jié)。某些機器選擇在存儲器中按照從最低為有效字節(jié)到最高有效字節(jié)的順序存儲對象,而另一些機器則按照從最高為有效字節(jié)到到最低為有效字節(jié)的順序存儲,前一種存儲方式被稱為小端存儲,后一種方式被稱為大端存儲。

舉個例子,對于十六進制數0x01234567,其字節(jié)的存儲順序便依賴于機器,如下:

35c22de4-c23a-11ed-bfe3-dac502259ad0.png

我們可以通過下面的函數測試是大端存儲還是小端存儲:

35d7fb24-c23a-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5052

    文章

    18911

    瀏覽量

    300770
  • 數據傳輸
    +關注

    關注

    9

    文章

    1743

    瀏覽量

    64331
  • 內存
    +關注

    關注

    8

    文章

    2945

    瀏覽量

    73729
  • 串口
    +關注

    關注

    14

    文章

    1536

    瀏覽量

    75886
  • 結構體
    +關注

    關注

    1

    文章

    127

    瀏覽量

    10812

原文標題:干貨 | 串口數據傳輸中的共用體和結構體如何轉換?

文章出處:【微信號:電子工程世界,微信公眾號:電子工程世界】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言-枚舉、共用

    前面章節(jié)學習了結構結構里可以按順序存放相同或者不同的數據類型,每個成員都有它對應的存儲空間。 而
    的頭像 發(fā)表于 09-09 11:31 ?923次閱讀

    socket 傳輸結構 省去字符與數據轉換

    socket通訊send函數直接傳送的是字符串為了避免客戶端和服務器斷的數據格式轉換,使用結構傳輸
    發(fā)表于 09-25 16:58

    結構-共用和用戶定義類型

    結構-共用和用戶定義類型
    發(fā)表于 01-31 10:48

    模擬數字轉換數據傳輸

    的穩(wěn)定性,令數據傳輸出現誤碼??朔@些問題的其中一個辦法是采用低電壓差分信號 (LVDS) 數據總線。圖 1 是其中一種模擬/數字轉換器的結構框圖,帶有LVDS 輸出信號,驅動專用集成
    發(fā)表于 07-12 06:18

    串口傳輸結構是什么意思

    串口傳輸 結構就是 把結構 轉換為 數組 ,然后傳輸
    發(fā)表于 07-14 08:34

    結構共用的區(qū)別

    轉載重點:共用的所有成員占用同一段內存,修改一個成員會影響其余所有成員。圖形分析影響過程通過前面的講解,我們知道結構(Struct)是一種構造類型或復雜類型,它可以包含多個類型不同
    發(fā)表于 07-20 06:57

    C語言的結構共用在單片機的妙用是什么

    【分享】C語言的結構共用在單片機的妙用C語言的結構
    發(fā)表于 11-30 06:13

    怎樣去使用C語言的結構共用

    C語言的結構共用分別有何特點呢?怎樣去使用C語言的結構
    發(fā)表于 01-17 07:51

    stm32數據傳輸的相關資料分享

    簡介DMA,全稱Direct Memory Access,即直接存儲器訪問。DMA傳輸數據從一個地址空間復制到另一個地址空間,提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。它的作用
    發(fā)表于 02-22 06:58

    數據傳輸的成幀

    什么是數據傳輸的成幀 數據傳輸的成幀 成幀技術是一種用來在一個比特流內分配或標記信道的技術,為電信提供選擇基本的時隙結構和管理方式、
    發(fā)表于 03-18 14:46 ?3736次閱讀

    McBSP技術在數據傳輸的應用

    在嵌入式數據傳輸系統(tǒng)中經常會遇到DSP芯片與模/數轉換器接口的問題,為提高信號的采樣、傳輸速度與精度,增強系統(tǒng)可靠性,給出了基于DSP芯片的多通道緩沖串口(McBSP)在
    發(fā)表于 05-03 18:05 ?34次下載

    共用結構的區(qū)別

    在c++,結構(struct)和共用(union)是兩種很相似的復合數據類型,都可以用來存
    發(fā)表于 11-19 17:46 ?3.7w次閱讀

    C語言的結構共用在單片機的妙用

    【分享】C語言的結構共用在單片機的妙用C語言的結構
    發(fā)表于 11-20 19:36 ?20次下載
    C語言的<b class='flag-5'>結構</b><b class='flag-5'>體</b>和<b class='flag-5'>共用</b><b class='flag-5'>體</b>在單片機<b class='flag-5'>中</b>的妙用

    串口傳輸數據時,結構如何轉換?

    嵌入式系統(tǒng)的串口數據傳輸都是以字節(jié)為單位,但是有些特殊的數據類型,比如浮點型float a=231.5,在內存是如何表示的呢?
    的頭像 發(fā)表于 05-19 10:52 ?687次閱讀
    <b class='flag-5'>串口傳輸</b><b class='flag-5'>數據</b>時,<b class='flag-5'>結構</b><b class='flag-5'>體</b>如何<b class='flag-5'>轉換</b>?

    串口數據傳輸共用結構之間的轉換技巧

    如果我們從串口接收到4個字節(jié)數據{0x43,0x67,0x80,0x00},如何把這4個字節(jié)的數據轉換為float型呢?
    的頭像 發(fā)表于 03-22 12:28 ?624次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>數據傳輸</b><b class='flag-5'>共用</b><b class='flag-5'>體</b>與<b class='flag-5'>結構</b><b class='flag-5'>體</b>之間的<b class='flag-5'>轉換</b>技巧