国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

Q4MP_gh_c472c21 ? 來源:嵌入式專欄 ? 作者:嵌入式專欄 ? 2022-04-08 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統的串口數據傳輸都是以字節為單位,但是有些特殊的數據類型,比如浮點型float a=231.5,在內存是如何表示的呢?

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

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

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

對于共用體:

typedefunion
{
floatf;
unsignedchars[4];
}Union_test;

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

#include
//共用體
//floatf;//4個字節
//chars[4];//4個字節
typedefunion
{
floatf;
unsignedchars[4];
}Union_test;
typedefstructst
{
floatf1;
}Struct_test;
voidmain(void)
{
floata=231.5;
Union_testx;
Struct_testz;
x.f=a;
z=*(Struct_test*)(&(x.s));
printf("z=%.2f
",(double)z.f1);
printf("Endofthisprogramme
");
}

監視結果如下所示:

8a680a3a-b6ba-11ec-aa7f-dac502259ad0.jpg

我們同樣適用結構體做了相同的實驗,將數組s[4]={0x00,0x80,0x67,0x43}的首地址s[0]強制轉換賦值給結構體z,最后打印輸出的結果也是231.5

這里我們看到原本應該是0x4367_8000的數據實際存儲的時候變成了00H 80H 67H 43H,這是因為計算機系統使用了小端存儲,什么是小端存儲呢?

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

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

8a7c3104-b6ba-11ec-aa7f-dac502259ad0.png我們可以通過下面的函數測試是大端存儲還是小端存儲:
voidtest(void)
{
inta=1;
unsignedchar*start=&a;
if(*start==1)
printf("小端存儲");
elseif(*start==0)
printf("大端存儲");
}

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

    關注

    4

    文章

    244

    瀏覽量

    28422
  • 串口
    +關注

    關注

    15

    文章

    1619

    瀏覽量

    82815
  • 傳輸數據
    +關注

    關注

    1

    文章

    128

    瀏覽量

    16505

原文標題:串口傳輸數據時,結構體如何轉換?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ADC轉換-DMA傳輸

    傳輸 ADC_InitStruct.ADC_Align = ADC_AlignRight; //ADC轉換結果右對齊 ADC_InitStruct.ADC_AccEn
    發表于 01-27 07:27

    10個例子代碼,C語言結構的高級

    ;, current->data); current = current->next; } return 0; } 這個例子展示了結構的自引用,其中每個結構體節點包含一個
    發表于 01-05 06:32

    一個經典的結構和聯合體共用的實例

    Linux 中可以 使用 sizeof 進行獲取,默認為字節對齊的大小。 聯合體 聯合體的參數共享同一個內存地址,所占的內存大小完全是由聯合體中參數類型決定字長,然后數據共享,內存共享等。 結構和聯合體
    發表于 12-16 07:14

    結構聲明與定義

    1、聲明 結構的聲明使用struct關鍵字,如果我們想要把我們的學籍信息組織一下的話,可以這樣表示: struct Info { unsigned long identifier;//學號
    發表于 12-11 07:52

    typedef結構使用

    雖然結構的出現能夠讓我們有一個更科學的數據結構來管理數據,但是每次使用結構都需要struct
    發表于 12-08 07:04

    為什么不建議用匿名結構

    說起匿名結構,想必大家第一感覺就是看著好高大上的名字,但實際上也就那樣。 typedef struct { union { struct { uint8_t bit_0:1
    發表于 12-04 07:39

    C語言結構使用

    有時候需要將不同類型的數據組合為一個整體,以便于引用。例如,一名學生有學號、姓名、性別、年齡等屬性,如果針對每個屬性都單獨定義一個變量,那么當有多名學生時變量就難以分清。結構就是用來管理不同類
    發表于 11-12 08:30

    使用MCU200T開發板的UART口進行數據傳輸

    ;amp;gt;Source->Drivers文件夾里可以看到。 完成uart口初始化后,我們開啟中斷發送使能。 根據鏈路狀態寄存器LSR的狀態判斷是否有數據從UART口傳輸
    發表于 10-28 08:16

    串行通信接口的結構和功能

    串口通訊的數據包由發送設備通過自身的TXD接口傳輸到接收設備的RXD接口。在串口通訊的協議層中,規定了數據包的內容,它由啟始位、主體
    的頭像 發表于 10-17 09:39 ?3931次閱讀
    串行通信接口的<b class='flag-5'>結構</b>和功能

    【RA4M2-SENSOR】串口傳輸MPU6050陀螺儀數據測評

    RA4M2串口傳輸MPU6050陀螺儀數據測評 1. 套件概述 RA4M2-SENSOR 是一款基于 RA4M2 系列微控制器的評估套件,支持 TrustZone 技 術和片內安全加密引擎(SCE
    發表于 09-14 11:41

    智嵌物聯串口轉光纖轉換器-延長串口通信距離,增強抗干擾性能

    智嵌物聯研發的串口光纖收發器是將RS-485/422/RS232接口信號轉換為光纖接口傳輸,通信距離可達20Km,大大延長串口的通信距離以及抗干擾性能。設備可自適應
    的頭像 發表于 06-27 17:08 ?735次閱讀
    智嵌物聯<b class='flag-5'>串口</b>轉光纖<b class='flag-5'>轉換</b>器-延長<b class='flag-5'>串口</b>通信距離,增強抗干擾性能

    串口網關是什么

    、MQTT等),實現串口設備與網絡之間的互聯互通。它解決了傳統串口設備無法直接接入網絡的問題,是工業物聯網(IIoT)和智能設備管理中的關鍵組件。 核心功能 協議轉換串口
    的頭像 發表于 06-05 11:31 ?786次閱讀

    GLAD應用:全息光柵模擬

    用于模擬全息記錄介質中形成的梯度折射率分布。全息結構一旦形成,就可以在傳輸過程中將一束入射光波逐漸轉換成形成體全息結構的另一束光波。兩束光
    發表于 05-15 09:32

    C語言中結構與聯合體的深度解析:內存布局與應用場景

    一、基礎概念與核心差異 1.1 結構(Struct)的本質 **結構是C語言中實現數據封裝的基石,其核心特征在于內存獨立性。每個成員變量
    發表于 04-08 09:18

    如何通過串口將8路adc采集的數據傳輸給上位機顯示

    處理模塊data_dispose把采集的八路數據轉換為電壓數據,并且轉換為BCD編碼。uart_byte模塊選擇對應通道的數據發送給
    的頭像 發表于 03-14 09:09 ?1632次閱讀
    如何通過<b class='flag-5'>串口</b>將8路adc采集的<b class='flag-5'>數據傳輸</b>給上位機顯示