色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    230

    瀏覽量

    27680
  • 串口
    +關注

    關注

    14

    文章

    1551

    瀏覽量

    76444
  • 傳輸數據
    +關注

    關注

    1

    文章

    122

    瀏覽量

    16101

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

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

收藏 人收藏

    評論

    相關推薦

    結構成員的順序會影響結構的大小嗎

    相同的結構成員,如果把順序調整一下,會不會影響結構的大小? 答案是會的,這主要跟字節對齊有關。 比如這樣的結構
    的頭像 發表于 11-25 16:24 ?154次閱讀

    基于51單片機的溫濕度檢測報警及串口傳輸系統

    溫濕度報警閾值,且測得的溫濕度超過設定的閾值時,相應報警指示燈閃爍,蜂鳴器報警; (3)可將測得的溫濕度值實時發送到串口顯示。仿真演示視頻:基于51單片機的溫濕度檢測報警及串口傳輸系統-仿真
    的頭像 發表于 10-22 14:12 ?237次閱讀
    基于51單片機的溫濕度檢測報警及<b class='flag-5'>串口傳輸</b>系統

    sdi接口傳輸什么信號

    通過嵌入方式實現同步傳輸)進行采樣、量化、編碼等處理,然后轉化為串行數據流進行傳輸。在傳輸過程中,SDI接口采用了差分信號傳輸和時鐘恢復技術
    的頭像 發表于 08-20 15:03 ?1180次閱讀

    請問ESP32是否支持串口在線升級?

    請問ESP32是否支持串口在線升級。對OTA升級例程進行修改,將http傳輸改為串口傳輸,是否可行。
    發表于 06-18 06:30

    C語言結構史上最詳細的講解【軟件干貨】

    struct結構數據類型 前言 我們知道,在C語言中有一些基本的數據類型,如?char?int?float?long?double?string(c99) 等等
    的頭像 發表于 03-28 17:52 ?746次閱讀

    串口通訊的三種雙工模式及工作原理

    對于文本數據,通常使用ASCII編碼進行轉換,以便在串口上傳輸。ASCII編碼將每個字符映射到一個特定的字節值,使得文本信息可以在串口通信中進行傳輸
    的頭像 發表于 03-27 16:04 ?6645次閱讀
    <b class='flag-5'>串口</b>通訊的三種雙工模式及工作原理

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

    如果我們從串口接收到4個字節數據{0x43,0x67,0x80,0x00},如何把這4個字節的數據轉換為float型呢?
    的頭像 發表于 03-22 12:28 ?721次閱讀
    <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>技巧

    什么是串口 串口傳輸和adc的關系及區別

    串口通信中,數據以位的形式逐個傳輸,一般采用異步通信方式,即不需要時鐘信號來同步數據傳輸。在每個字符的開頭和結尾會有起始位和停止位,用于標識數據
    的頭像 發表于 03-12 17:32 ?1650次閱讀

    什么是串口 串口無法傳輸數據的原因

      串口的出現可以追溯到1980年前后,當時的數據傳輸率大約在115kbps至230kbps之間。初期,串口主要用于連接計算機的外設,如鼠標、外置Modem、老式攝像頭和寫字板等設備。
    的頭像 發表于 03-01 16:28 ?9821次閱讀
    什么是<b class='flag-5'>串口</b> <b class='flag-5'>串口</b>無法<b class='flag-5'>傳輸</b><b class='flag-5'>數據</b>的原因

    編解碼一機在流媒體傳輸中的核心作用

    編解碼一機在流媒體傳輸中起著核心作用,主要表現在以下幾個方面: 1. 視頻和音頻編碼:編解碼一機能夠對視頻和音頻數據進行高效的編碼,將原始的多媒體
    的頭像 發表于 01-31 14:20 ?428次閱讀
    編解碼一<b class='flag-5'>體</b>機在流媒體<b class='flag-5'>傳輸</b>中的核心作用

    串口通訊時的數據幀格式和通訊協議有什么區別?

    串口通訊時的數據幀格式和通訊協議是兩個不同的概念,它們在串口通訊中起著不同的作用,但都是為了實現可靠的、有效的數據傳輸
    的頭像 發表于 01-30 09:21 ?2000次閱讀

    求助,請問一個結構如何全部定義到 __attribute__ 區域?

    請問一個結構如何全部定義到 __attribute__ 區域? 例如我這里涉及到一些高速計算的緩存,計劃將緩存數據存儲到 __attribute__ 區域。 三個結構
    發表于 01-16 07:29

    結構與指針的關系

    在C語言中,結構(Struct)是一種用戶自定義的數據類型,它允許您將不同類型的數據項組合在一起,以便形成一個更復雜的數據結構
    的頭像 發表于 01-11 08:00 ?982次閱讀
    <b class='flag-5'>結構</b><b class='flag-5'>體</b>與指針的關系

    TS201 link口傳輸數據不通,用示波器觀察LACKO信號一直為低電平是為什么?

    TS201 link口傳輸數據,一個link口為發送,一個link口為接收,link口和相關DMA配置和初始化完成后,在主函數當中收發一直運行,目前只發送4個unsigned int型數據,link口的
    發表于 01-11 07:13

    USB虛擬串口串口1可以同時發送嗎

    可以同時發送,USB虛擬串口和物理串口1都可以作為數據傳輸的通道,可以同時操作和發送數據。 USB虛擬串口是一種通過USB接口模擬的
    的頭像 發表于 01-04 11:26 ?1547次閱讀
    主站蜘蛛池模板: 欧美xxxxx九色视频免费观看| 国产AV精品无码免费看| 亚洲午夜精品A片久久WWW软件| 午夜理论片YY4399影院| 日本熟妇乱妇熟色A片蜜桃亚洲| 欧美视频精品一区二区三区| 免费精品国产人妻国语| 蜜柚在线观看免费高清官网视频| 啦啦啦 中文 日本 韩国 免费| 久久精品一区| 久久伊人影院| 美女被触手注入精子强制受孕漫画 | 久久99国产精品二区不卡| 国产一区二区内射最近更新| 国产亚洲国际精品福利| 国产色精品久久人妻99蜜桃麻豆| 国产精品日本欧美一区二区| 国产精品嫩草影视在线观看| 国产午夜精品不卡视频| 很很射影院| 久久伊人青青| 欧美日韩精品一区二区三区高清视频 | 国产精品久久人妻拍拍水牛影视| 国产成人免费在线观看| 国产精品香蕉视频在线| 国产午夜精品片一区二区三区| 韩国女人高潮嗷嗷叫视频| 久久99视频免费| 麻豆精品一卡2卡三卡4卡免费观看| 免费成人高清在线视频| 青娱乐国产精品视频| 天天看学生视频| 亚洲中文无码永久免费| 综合亚洲桃色第一影院| 99久视频只有精品2019| 俄罗斯另类Z0Z0ZOZO| 国产亚洲精品久久久久小| 久久精品中文字幕有码日本| 嫩草影院久久99| 无码射肉在线播放视频| 夜月视频直播免费观看|