一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)傳輸
    +關(guān)注

    關(guān)注

    9

    文章

    2015

    瀏覽量

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

    關(guān)注

    11

    文章

    3481

    瀏覽量

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

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細(xì)介紹這些語句的作用及其應(yīng)用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?1111次閱讀
    深入理解<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)存塊。以學(xué)生信息為
    發(fā)表于 04-08 09:18

    【一文看懂】什么是側(cè)算力?

    向您介紹全方面側(cè)算力:1.側(cè)算力的定義2.側(cè)算力的技術(shù)框架3.側(cè)算力的應(yīng)用價值與場景4.
    的頭像 發(fā)表于 02-24 12:02 ?1293次閱讀
    【一文看懂】什么是<b class='flag-5'>端</b>側(cè)算力?

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

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

    EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù).pdf》資料免費下載
    發(fā)表于 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>調(diào)用匯編類成員函數(shù)

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

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

    C語言中的socket編程基礎(chǔ)

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實現(xiàn)不同計算機之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?1210次閱讀

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

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

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

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

    放大器單輸出的區(qū)別

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

    壓敏電阻的阻值大小和什么有關(guān)

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

    C2000?MCU的運行時堆棧大小監(jiān)測

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

    c語言中從左到右結(jié)合怎么看

    C語言中,操作符的結(jié)合性(Associativity)是指當(dāng)操作符在表達(dá)式中連續(xù)出現(xiàn)時,它們?nèi)绾闻c操作數(shù)結(jié)合的順序。對于大多數(shù)二元操作符(即需要兩個操作數(shù)的操作符),C語言遵循兩種基
    的頭像 發(fā)表于 08-20 11:42 ?1655次閱讀

    電源兩的電壓為什么是路端電壓

    電源兩的電壓為什么是路端電壓,這是一個涉及到電路原理、電壓概念、電源特性等多方面因素的問題。 電壓的概念和定義 電壓是電場力作用下,單位電荷在兩點間移動時所做的功。在電路中,電壓是衡量電能轉(zhuǎn)換
    的頭像 發(fā)表于 08-15 09:29 ?4739次閱讀

    電阻的電流和電壓是如何區(qū)分的

    電阻,又稱為四測量電阻或凱爾文電阻,是一種特殊的電阻器,主要用于精密測量電路中的電阻值。四電阻的電流和電壓的區(qū)分對于測量的準(zhǔn)確性
    的頭像 發(fā)表于 08-05 10:48 ?2384次閱讀