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

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

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

3天內不再提示

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

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

大小端定義:

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

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

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

應用場景:

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

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

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

    文章

    1923

    瀏覽量

    64685
  • 硬件
    +關注

    關注

    11

    文章

    3348

    瀏覽量

    66308
  • C語言
    +關注

    關注

    180

    文章

    7608

    瀏覽量

    137140
收藏 人收藏

    評論

    相關推薦

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

    自動駕駛在大規模駕駛數據上訓練,展現出很強的決策規劃能力,但是面對復雜罕見的駕駛場景,依然存在局限性,這是因為模型缺乏常識知識和
    的頭像 發表于 11-07 15:15 ?282次閱讀
    連接視覺<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 ?379次閱讀

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

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

    放大器單輸出的區別

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

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

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

    電容兩的電壓由什么決定

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

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

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

    STM8L內存存儲上有辦法設置大小嗎?

    我想知道STM8L內存存儲上有辦法設置大小嗎?
    發表于 04-17 08:22

    字傳輸不變的3種大小處理方式

    大端,最高字節存儲在最低的內存地址,小則是最低有效字節存儲在最低的內存地址。在Verilog中實現大端(Big-Endian)和小(Little-Endian)之間的轉換通常涉及到對多字節數據的操作。
    的頭像 發表于 04-02 10:32 ?658次閱讀
    字傳輸不變的3種<b class='flag-5'>大小</b><b class='flag-5'>端</b>處理方式

    交換芯片緩沖區大小是什么

    交換芯片緩沖區大小并不一定是固定的。緩沖區的設計和實現會根據芯片的具體型號、規格以及應用場景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區,以滿足特定的性能需求或成本限制。然而
    的頭像 發表于 03-18 14:42 ?656次閱讀

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?521次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎<b class='flag-5'>實現</b>與應用

    C語言中的typedef的應用

    C 語言提供了 typedef 關鍵字,您可以使用它來為類型取一個新的名字。下面的實例為單字節數字定義了一個術語 BYTE。
    發表于 03-06 11:34 ?403次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的應用

    枚舉有多大?c語言枚舉end的作用是什么?

    枚舉有多大?c語言枚舉end的作用是什么? 枚舉在C語言中是一種常見的數據類型,用于定義一組相互關聯的常量或者變量。它通常用于表示一系列可能
    的頭像 發表于 01-19 14:19 ?632次閱讀

    求助,請問STM32的FSMC可以配置大小嗎?

    STM32的FSMC可以配置大小么。
    發表于 01-17 08:22

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析

    一些措施來解決和防止其發生。本文將詳細介紹C語言中訪問權限沖突異常的原因以及解決方法。 一、訪問權限沖突異常的原因分析 訪問權限沖突異常可分為兩類:訪問私有成員和訪問未定義成員。下面分別分析這兩種異常的原因。 1. 訪問
    的頭像 發表于 01-12 16:03 ?5925次閱讀
    主站蜘蛛池模板: 国产精品看高国产精品不卡| MELODY在线播放无删减| 在线观看永久免费网址| 国产99九九久久无码熟妇| 久久棋牌评测| 亚洲七七久久桃花综合| 国产精品乱码一区二区三| 色欲AV蜜臀AV在线观看麻豆| https黄视| 求个av网站| 东京热百度影音| 视频成人永久免费看| 国产对白精品刺激一区二区| 善良的小峓子2在钱中文版女主角| 达达兔欧美午夜国产亚洲| 日本一区不卡在线播放视频免费| www.av色| 色播成人影院| 国产午夜视频在永久在线观看| 亚洲AV久久久噜噜噜噜| 国产亚洲精品AV片在线观看播放| 亚洲国产在线午夜视频无| 精品爽爽久久久久久蜜臀| 伊人无码高清| 欧美eee114| 岛国大片在线播放高清| 台湾佬综合娱乐网| 花蝴蝶在线观看免费8| 在线免费视频国产| 男女肉大捧进出全过程免费| 北岛玲手机在线观看视频观看| 色柚视频网站ww色| 国外色幼网| 97SE亚洲国产综合自在线不卡| 青柠在线观看免费播放电影| 国产精品1区2区| 一起碰一起噜一起草视频| 女人一级毛片免费观看| 国产叼嘿久久精品久久| 一扒二脱三插片在线观看| 欧美 亚洲综合在线一区|