91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

大小端定義與應(yīng)用場景及C語言中大小端的實現(xiàn)

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-02-28 08:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大小端定義:

大端模式:數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中,數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中;

小端模式:數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中,數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中;

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

應(yīng)用場景:

網(wǎng)絡(luò)上數(shù)據(jù)傳輸上往往采用大端模式進行數(shù)據(jù)傳輸;跨硬件平臺進行數(shù)據(jù)傳輸,數(shù)據(jù)格式存在差異,存儲字節(jié)的順序可能不同;采用通訊協(xié)議每次傳輸數(shù)據(jù)的字節(jié)有一點限制等

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

c語言中大小端的實現(xiàn):

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

z這里主要講解大小端數(shù)據(jù)轉(zhuǎn)化的原理與相關(guān)的代碼:

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

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

按照上述代碼測試一下,主函數(shù)調(diào)用一下,這里直接打印即可:

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

輸出結(jié)果:

217384ef

84ef

假如需要將一個int型can_data數(shù)據(jù)轉(zhuǎn)化為小端模式,可以嘗試如下代碼:

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

假如需要將一個int型can_data數(shù)據(jù)轉(zhuǎn)化為大端模式,可以嘗試如下代碼:

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

總結(jié):

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

審核編輯:湯梓紅

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

    關(guān)注

    9

    文章

    2201

    瀏覽量

    67588
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3595

    瀏覽量

    69020
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于Arm平臺的int8 Conformer模型部署

    在邊緣側(cè)運行高質(zhì)量的語音與音頻模型頗具挑戰(zhàn),需滿足時延、內(nèi)存、功耗和模型大小等多方面的嚴苛約束。不同于云端部署,邊緣側(cè)系統(tǒng)通常離線運行,需兼顧用戶隱私與可預(yù)測的實時性能。這些落地場景涵蓋側(cè)語音轉(zhuǎn)文本、語音助手、語音控制的物聯(lián)網(wǎng)
    的頭像 發(fā)表于 02-24 10:23 ?251次閱讀
    基于Arm平臺的<b class='flag-5'>端</b>到<b class='flag-5'>端</b>int8 Conformer模型部署

    C語言函數(shù)指針的六個高級的應(yīng)用場景

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數(shù)指針的高級應(yīng)用場景,并貼出相應(yīng)的代碼案例和解釋。 回調(diào)函數(shù) 回調(diào)函數(shù)是指在某個事件發(fā)生時被
    發(fā)表于 01-04 12:25

    C語言回調(diào)函數(shù)原來這么簡單

    ” 這個概念,它是回調(diào)函數(shù)能夠實現(xiàn)的重要基礎(chǔ)。 1、函數(shù)指針學習過C語言的伙伴都知道,C語言中的靈魂 — 指針。可以毫不猶豫的說,要檢驗?zāi)銓?/div>
    發(fā)表于 12-30 06:45

    請問C語言中整形溢出的解決方法有哪些?

    C語言中整形溢出的解決方法有哪些?
    發(fā)表于 12-29 07:33

    單片機c語言中定義字節(jié)怎么定義?

    定義位可以用***it但是定義字節(jié)呢?還有就是比如匯編中的DPTR的DPH和DPL在c語言中怎樣定義的呢?
    發(fā)表于 12-29 06:32

    請問C語言中整形溢出會產(chǎn)生哪些異常行為?

    C語言中整形溢出會產(chǎn)生哪些異常行為?
    發(fā)表于 12-26 07:05

    請問C語言中整形溢出對哪些應(yīng)用場景影響較大?

    C語言中整形溢出對哪些應(yīng)用場景影響較大
    發(fā)表于 12-24 08:24

    Typedef在C語言中的應(yīng)用

    Typedef 在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * typedef
    發(fā)表于 12-22 13:53

    C語言中可以嵌套匯編語言嗎?

    請問C語言中可以嵌套匯編語言嗎?
    發(fā)表于 12-15 08:14

    觸控板的“大小之爭”,真的只是數(shù)字差異?

    在筆記本電腦的使用體驗中,觸控板是僅次于鍵盤的核心交互部件。不少用戶在選擇設(shè)備時會疑惑:大觸控板和小尺寸觸控板,難道僅僅是面積大小不同嗎?實則不然。從日常操作的流暢度到復(fù)雜功能的實現(xiàn),從單一場景
    的頭像 發(fā)表于 10-30 15:32 ?546次閱讀

    光纜怎么分ab

    光纜分AB是通信工程中的關(guān)鍵步驟,主要用于確保光纖連接的極性正確,避免信號傳輸錯誤。以下是光纜分AB的詳細說明: 一、AB定義與作用 定義
    的頭像 發(fā)表于 09-28 09:38 ?1977次閱讀

    黑芝麻智能全棧式輔助駕駛系統(tǒng)的應(yīng)用場景

    黑芝麻智能推出的全新一代全棧輔助駕駛系統(tǒng),以武當C1200系列高算力芯片為基石,深度融合自研感知算法,實現(xiàn)場景感知到車輛控制的完全閉
    的頭像 發(fā)表于 09-09 17:19 ?2586次閱讀

    NCS更改MTU大小

    NCS更改MTU大小 一、 什么是MTU MTU(Maximum Transmission Unit)即最大傳輸單元,它定義了藍牙網(wǎng)絡(luò)層協(xié)議一次能傳輸?shù)淖畲髷?shù)據(jù)量。在藍牙低功耗(BLE)通信
    的頭像 發(fā)表于 06-27 17:13 ?798次閱讀
    NCS更改MTU<b class='flag-5'>大小</b>

    深入理解C語言C語言循環(huán)控制

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

    C語言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場景

    一、基礎(chǔ)概念與核心差異 1.1 結(jié)構(gòu)體(Struct)的本質(zhì) **結(jié)構(gòu)體是C語言中實現(xiàn)數(shù)據(jù)封裝的基石,其核心特征在于內(nèi)存獨立性。每個成員變量在內(nèi)存中按聲明順序依次排列,形成連續(xù)的內(nèi)存塊。以學生信息為
    發(fā)表于 04-08 09:18