女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

大小端定義與應用場景及C語言中大小端的實現

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-02-28 08:52 ? 次閱讀

大小端定義:

大端模式:數據的高字節保存在內存的低地址中,數據的低字節保存在內存的高地址中;

小端模式:數據的高字節保存在內存的高地址中,數據的低字節保存在內存的低地址中;

舉個例子來說明,我們利用485進行通訊,采用的大端模式傳輸16進制數據為:01 23/ef 05,按照大端模式的數據為2301和05ef,轉化為10進制為8961和1519。說白了就是直接將數據拼接進行轉化。

應用場景:

網絡上數據傳輸上往往采用大端模式進行數據傳輸;跨硬件平臺進行數據傳輸,數據格式存在差異,存儲字節的順序可能不同;采用通訊協議每次傳輸數據的字節有一點限制等

例如char類型數據只占一個字節,傳輸可以直接傳輸,但是對于非char類型的數據,要在RS485,CAN通訊過程中就需要進行大小端數據的轉化。

c語言中大小端的實現:

注意在轉化過程中需要保持相同的大小端數據格式,不可以形成同一組數據中同時存在大端和小端數據,容易讓使用者或者二次開發者產生誤解。

z這里主要講解大小端數據轉化的原理與相關的代碼:

首先常用的有16位數據和32位數據大小端轉化,作為嵌入式代表的STM32單片機的unsingned int型:

/* 32位數據小端模式 */
#define uint32_data(x)    //定義32位數據,這里x為用戶自己定義的需要轉化的數據
(uint32_t)((((uint32_t)(x) & 0xff000000) >> 24) |\            //這里是ff000000不是ffff0000,按照每兩個字節進行的轉化
                    (((uint32_t)(x) & 0xff000000) >> 8) |\    //數據右移8位
                    (((uint32_t)(x) & 0x0000ffff) << 8) |\    //數據左移8位
                    (((uint32_t)(x) & 0x000000ff) << 24)\
             )  
/* 16位數據小端模式 */             
#define uint16_data(x)    //定義16位數據,這里x為用戶自己定義的需要轉化的數據
(uint16_t)((((uint16_t)(x) & 0x00ff) << 8) |\
          ((((uint16_t)(x) & 0xff00) >> 8) \
          )

按照上述代碼測試一下,主函數調用一下,這里直接打印即可:

printf("%#x\n",uint32_data(0xef847321));
printf("%#x\n",uint16_data(0xef84));

輸出結果:

217384ef

84ef

假如需要將一個int型can_data數據轉化為小端模式,可以嘗試如下代碼:

can_data[0] = (u8)(num & 0xFF);           //取數據低8位
can_data[1] = (u8)((num >> 8) & 0xFF);    //數據右移8位,將低位移除保留高位數據

假如需要將一個int型can_data數據轉化為大端模式,可以嘗試如下代碼:

can_data[2] = (u8)((num >> 8) & 0xFF);           //數據右移8位,將低位移除保留高位數據
can_data[3] = (u8)(num & 0xFF);                  //取數據為低8位

總結:

數據的大小端對不同平臺數據傳輸具有重要意義,在具體使用時需要根據需要進行數據轉化。

審核編輯:湯梓紅

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

    關注

    9

    文章

    2002

    瀏覽量

    65632
  • 硬件
    +關注

    關注

    11

    文章

    3457

    瀏覽量

    67160
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140164
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    深入理解C語言C語言循環控制

    改變程序的執行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發表于 04-29 18:49 ?732次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

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

    一、基礎概念與核心差異 1.1 結構體(Struct)的本質 **結構體是C語言中實現數據封裝的基石,其核心特征在于內存獨立性。每個成員變量在內存中按聲明順序依次排列,形成連續的內存塊。以學生信息為
    發表于 04-08 09:18

    DAC900電流輸出可以直接連接電阻嗎?對電阻的大小有什么要求?

    想問下DAC900電流輸出可以直接連接電阻嗎?對電阻的大小有什么要求。
    發表于 02-12 06:20

    EE-128:C語言中的DSP:從C調用匯編類成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編類成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的DSP:從<b class='flag-5'>C</b>調用匯編類成員函數

    連接視覺語言大模型與自動駕駛

    自動駕駛在大規模駕駛數據上訓練,展現出很強的決策規劃能力,但是面對復雜罕見的駕駛場景,依然存在局限性,這是因為模型缺乏常識知識和
    的頭像 發表于 11-07 15:15 ?608次閱讀
    連接視覺<b class='flag-5'>語言</b>大模型與<b class='flag-5'>端</b>到<b class='flag-5'>端</b>自動駕駛

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?1006次閱讀

    C語言中最常見的宏定義寫法

    如果讓你用C語言寫個宏定義,我相信大部分同學順手就能寫出define。
    的頭像 發表于 10-28 11:12 ?701次閱讀

    工業制造行業的RFID讀寫器形狀大小如何選型

    在工業制造行業,RFID讀寫器的形狀和大小選型主要取決于具體的應用場景、工作環境、安裝條件以及讀寫需求。以下是一些關鍵的選型因素和建議:
    的頭像 發表于 10-16 10:24 ?487次閱讀
    工業制造行業的RFID讀寫器形狀<b class='flag-5'>大小</b>如何選型

    放大器單輸出的區別

    放大器是電子學中的一種重要設備,用于增強信號的幅度。在放大器的設計和應用中,單輸出和雙輸出是兩種常見的輸出方式。這兩種方式各有特點和應用場景。 1. 單輸出放大器 1.1
    的頭像 發表于 10-08 16:36 ?2902次閱讀

    壓敏電阻的阻值大小和什么有關

    壓敏電阻的阻值大小主要與以下幾個因素有關: 一、電壓 壓敏電阻的阻值與其兩施加的電壓大小密切相關。具體表現為: 當加到壓敏電阻器上的電壓在其標稱值以內時,電阻器的阻值呈現無窮大狀態,幾乎無電流
    的頭像 發表于 09-11 16:16 ?749次閱讀
    壓敏電阻的阻值<b class='flag-5'>大小</b>和什么有關

    C2000?MCU的運行時堆棧大小監測

    電子發燒友網站提供《C2000?MCU的運行時堆棧大小監測.pdf》資料免費下載
    發表于 09-11 09:30 ?0次下載
    <b class='flag-5'>C</b>2000?MCU的運行時堆棧<b class='flag-5'>大小</b>監測

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續出現時,它們如何與操作數結合的順序。對于大多數二元操作符(即需要兩個操作數的操作符),C語言遵循兩種基
    的頭像 發表于 08-20 11:42 ?1438次閱讀

    電容兩的電壓由什么決定

    的面積、介電常數和極板間距。根據電容的定義公式: C = εA/d 其中,C 表示電容,ε 表示介電常數,A 表示電容的面積,d 表示極板間距。從這個公式可以看出,電容的大小與介電常數
    的頭像 發表于 07-11 09:49 ?3656次閱讀

    比較器輸入和輸出的關系

    比較器是一種電子設備,用于比較兩個電壓或電流信號的大小。比較器的輸入和輸出之間的關系是其核心功能之一。 比較器的基本原理 比較器是一種模擬電路,其基本原理是將兩個輸入信號進行比較,并根據比較結果
    的頭像 發表于 07-10 10:39 ?3633次閱讀

    MQTT客戶大小分配過大而導致無法初始化怎么處理?

    在配置MQTT客戶時,因為我想接收很大的數據包(最大500k)。因此我想一次接收完成(擴展了psram)。所以我在配置MQTT客戶時將棧大小設置為114688,將接收緩沖區大小設置
    發表于 06-21 12:54