在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(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)存的低地址中;

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

應(yīng)用場(chǎng)景:

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

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

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

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

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

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

/* 32位數(shù)據(jù)小端模式 */
#define uint32_data(x)    //定義32位數(shù)據(jù),這里x為用戶(hù)自己定義的需要轉(zhuǎn)化的數(shù)據(jù)
(uint32_t)((((uint32_t)(x) & 0xff000000) >> 24) |\            //這里是ff000000不是ffff0000,按照每?jī)蓚€(gè)字節(jié)進(jìn)行的轉(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為用戶(hù)自己定義的需要轉(zhuǎn)化的數(shù)據(jù)
(uint16_t)((((uint16_t)(x) & 0x00ff) << 8) |\
          ((((uint16_t)(x) & 0xff00) >> 8) \
          )

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

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

輸出結(jié)果:

217384ef

84ef

假如需要將一個(gè)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ù)

假如需要將一個(gè)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ù)的大小端對(duì)不同平臺(tái)數(shù)據(jù)傳輸具有重要意義,在具體使用時(shí)需要根據(jù)需要進(jìn)行數(shù)據(jù)轉(zhuǎn)化。

審核編輯:湯梓紅

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

    關(guān)注

    9

    文章

    1957

    瀏覽量

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

    關(guān)注

    11

    文章

    3391

    瀏覽量

    66471
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137753
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    連接視覺(jué)語(yǔ)言大模型與自動(dòng)駕駛

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

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

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

    C語(yǔ)言中最常見(jiàn)的宏定義寫(xiě)法

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

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

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

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

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

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

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

    C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè)

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

    電容兩的電壓由什么決定

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

    比較器輸入和輸出的關(guān)系

    比較器是一種電子設(shè)備,用于比較兩個(gè)電壓或電流信號(hào)的大小。比較器的輸入和輸出之間的關(guān)系是其核心功能之一。 比較器的基本原理 比較器是一種模擬電路,其基本原理是將兩個(gè)輸入信號(hào)進(jìn)行比較,并根據(jù)比較結(jié)果
    的頭像 發(fā)表于 07-10 10:39 ?2695次閱讀

    MQTT客戶(hù)大小分配過(guò)大而導(dǎo)致無(wú)法初始化怎么處理?

    在配置MQTT客戶(hù)時(shí),因?yàn)槲蚁虢邮蘸艽蟮臄?shù)據(jù)包(最大500k)。因此我想一次接收完成(擴(kuò)展了psram)。所以我在配置MQTT客戶(hù)時(shí)將棧大小設(shè)置為114688,將接收緩沖區(qū)大小設(shè)置
    發(fā)表于 06-21 12:54

    STM8L內(nèi)存存儲(chǔ)上有辦法設(shè)置大小嗎?

    我想知道STM8L內(nèi)存存儲(chǔ)上有辦法設(shè)置大小嗎?
    發(fā)表于 04-17 08:22

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

    大端,最高字節(jié)存儲(chǔ)在最低的內(nèi)存地址,小則是最低有效字節(jié)存儲(chǔ)在最低的內(nèi)存地址。在Verilog中實(shí)現(xiàn)大端(Big-Endian)和小(Little-Endian)之間的轉(zhuǎn)換通常涉及到對(duì)多字節(jié)數(shù)據(jù)的操作。
    的頭像 發(fā)表于 04-02 10:32 ?701次閱讀
    字傳輸不變的3種<b class='flag-5'>大小</b><b class='flag-5'>端</b>處理方式

    交換芯片緩沖區(qū)大小是什么

    交換芯片緩沖區(qū)大小并不一定是固定的。緩沖區(qū)的設(shè)計(jì)和實(shí)現(xiàn)會(huì)根據(jù)芯片的具體型號(hào)、規(guī)格以及應(yīng)用場(chǎng)景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區(qū),以滿(mǎn)足特定的性能需求或成本限制。然而
    的頭像 發(fā)表于 03-18 14:42 ?689次閱讀

    嵌入式系統(tǒng)中C語(yǔ)言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用

    C語(yǔ)言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類(lèi)型數(shù)據(jù)。但是結(jié)構(gòu)是C語(yǔ)言編程中允許您存儲(chǔ)不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)。
    發(fā)表于 03-12 14:29 ?562次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>結(jié)構(gòu)體的基礎(chǔ)<b class='flag-5'>實(shí)現(xiàn)</b>與應(yīng)用

    C語(yǔ)言中的typedef的應(yīng)用

    C 語(yǔ)言提供了 typedef 關(guān)鍵字,您可以使用它來(lái)為類(lèi)型取一個(gè)新的名字。下面的實(shí)例為單字節(jié)數(shù)字定義了一個(gè)術(shù)語(yǔ) BYTE。
    發(fā)表于 03-06 11:34 ?432次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的typedef的應(yīng)用
    主站蜘蛛池模板: 日本天天射 | 孩交精品xxxx视频视频 | 好男人www社区影视在线 | 日本人xxxxxxxxx69 | 2015xxxx欧美 | 日本高清免费一本视频在线观看 | 狠狠色丁香九九婷婷综合五月 | 午夜影院免费观看视频 | 手机看片国产在线 | 中文字幕在线第一页 | 亚洲人成电影在线观看网 | 久久精品男人影院 | 中文字幕一精品亚洲无线一区 | 五月综合激情久久婷婷 | 天天干天天色天天干 | 一级特级女人18毛片免费视频 | 在线观看jyzzjyzz | 成人欧美精品久久久久影院 | 人人搞人人 | 丁香八月婷婷 | sihu国产午夜精品一区二区三区 | 俺去俺来也www色官网免费的 | 影院在线观看免费 | 一级片免费在线 | 五月欧美激激激综合网色播 | 四虎永久免费最新在线 | 日本xxxxxxxxx68| 欧美性狂猛bbbbbxxxxx | 全国男人的天堂网站 | 免费aa视频| 婷婷久久综合九色综合98 | 亚洲欧美视频一区二区 | 久热国产精品 | 色视频在线观看网站 | 久色tv| 免费能直接在线观看黄的视频 | 999久久久免费精品国产牛牛 | 欧美一级高清片欧美国产欧美 | 好色999| 4hu四虎永久免在线视 | 日本不卡视频免费 |