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

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

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

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

c語言中結(jié)構(gòu)體有聯(lián)合體的區(qū)別

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-12-03 14:25 ? 次閱讀

結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應(yīng)該都用得很多。但是,對于聯(lián)合體,一些初學(xué)的朋友可能用得并不多,甚至感到陌生。我們先來簡單看一下聯(lián)合體:

union 聯(lián)合名
{
成員表
};

成員表中含有若干成員,成員的一般形式為:類型說明符 成員名。其占用的字節(jié)數(shù)與成員中最大數(shù)據(jù)類型占用的字節(jié)數(shù)。

下面用代碼進行理解:

enum DATA_PKG_TYPE
{
    DATA_PKG1 = 1,
    DATA_PKG2,
    DATA_PKG3    
};

struct data_pkg1
{
    // ...
};

struct data_pkg2
{
    // ...
};

struct data_pkg3
{
    // ...
};

struct data_pkg
{
    enum DATA_PKG_TYPE data_pkg_type;
    union 
    {
       struct data_pkg1 data_pkg1_info;
       struct data_pkg2 data_pkg2_info;
       struct data_pkg3 data_pkg3_info;
    }data_pkg_info;
};

把struct data_pkg1、struct data_pkg2、struct data_pkg3三個結(jié)構(gòu)體放到了struct data_pkg這個結(jié)構(gòu)體里進行管理,把data_pkg_type與union里的三個結(jié)構(gòu)體建立一一對應(yīng)關(guān)系,我們需要用哪一結(jié)構(gòu)體數(shù)據(jù)就通過data_pkg_type來進行選中。

在進行數(shù)據(jù)組包的時候,先給data_pkg_type進行賦值,確定數(shù)據(jù)包的類型,再給對應(yīng)的union里的結(jié)構(gòu)體進行賦值;在進行數(shù)據(jù)解析的時候,通過data_pkg_type來選擇解析哪一組數(shù)據(jù)。

poYBAGOJ98iAQ1WEAAEwqauSLcU443.png

結(jié)構(gòu)體部分:

#define BUF_SIZE 16
union protocol_data
{
 uint8_t data_buffer[BUF_SIZE];
 struct 
 {
  uint8_t data1;
  uint8_t data2;
  uint8_t data3;
  uint8_t data4;
  // ...
 }data_info;
};

struct里面的內(nèi)容可以設(shè)計得很簡單,比如全是有用的數(shù)據(jù),或是設(shè)計得很復(fù)雜,包含一些協(xié)議頭尾、包長、有效數(shù)據(jù)、校驗等內(nèi)容。

但無論如何,我們組包發(fā)送的過程是填充結(jié)構(gòu)體->發(fā)送data_buffer;反之接收數(shù)據(jù)解析的過程就是接收數(shù)據(jù)存于data_buffer->使用結(jié)構(gòu)體數(shù)據(jù)

審核編輯:湯梓紅

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

    關(guān)注

    8

    文章

    3055

    瀏覽量

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

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137721
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    10872
收藏 人收藏

    評論

    相關(guān)推薦

    C語言聯(lián)合體的巧妙運用

    聯(lián)合體(Union)是C語言中的一種復(fù)合類型,它允許在同一內(nèi)存區(qū)域存儲多個不同的數(shù)據(jù)類型的成員(member),但只能同時存在其中一個成員。
    發(fā)表于 06-21 10:59 ?1908次閱讀

    430編程C語言常識(IAR)之結(jié)構(gòu)聯(lián)合體

      結(jié)構(gòu)聯(lián)合體C語言的常見數(shù)據(jù)類型,可對C的基本數(shù)據(jù)類型進行組合使之能表示復(fù)雜的數(shù)據(jù)
    發(fā)表于 11-22 15:43

    DLL導(dǎo)入結(jié)構(gòu) 聯(lián)合體

    DLL函數(shù)參數(shù)中,結(jié)構(gòu)聯(lián)合體結(jié)構(gòu)中使用聯(lián)合體
    發(fā)表于 09-06 10:32

    聯(lián)合體問題

    union U1{INT8Uax[4];FP32 fx;INT32Slx;INT32Uulx;INT16Six;INT16Uuix;INT8Scx;INT8Uucx;};U1 X_rom;//申請聯(lián)合接口數(shù)據(jù)變量定義如上的一個聯(lián)合體
    發(fā)表于 01-04 12:13

    如何定義了這個聯(lián)合體

    我先定義一個聯(lián)合體數(shù)據(jù)類型,然后接著定義了一些聯(lián)合體變量,定義聯(lián)合體部分如下:我在sys_config.c文件中定義如下聯(lián)合體數(shù)據(jù)類型和變量
    發(fā)表于 07-12 04:28

    為什么位域結(jié)構(gòu)聯(lián)合體一起使用?

    /*本例程是C語言的位域操作示例這里為什么位域結(jié)構(gòu)聯(lián)合體一起使用?-->因為這樣定義后,即可以單獨使用標志位 也可同時使用整個字節(jié)數(shù)據(jù)主
    發(fā)表于 07-14 06:23

    結(jié)構(gòu)與共用區(qū)別

    語言中,還有另外一種和結(jié)構(gòu)非常類似的語法,叫做共用(Union),它的定義格式為:union 共用名{成員列表};共用
    發(fā)表于 07-20 06:57

    結(jié)構(gòu)聯(lián)合體區(qū)別到底在哪里

    在單片機軟件編程中,結(jié)構(gòu)和枚舉類型都很常用到,聯(lián)合體相對來用的就比較少。那么結(jié)構(gòu)聯(lián)合體
    發(fā)表于 11-22 07:54

    如何利用聯(lián)合體去判斷大小端呢

    轉(zhuǎn)載,如若侵權(quán),請聯(lián)系本人刪除。聯(lián)合體定義聯(lián)合體結(jié)構(gòu)一樣都是自定義類型。聯(lián)合體也包含一系列成員,但是和
    發(fā)表于 12-15 07:21

    聯(lián)合體/共用的使用方法

    大家好,我是ZhengN。本次給分享聯(lián)合體的一些知識。聯(lián)合體/共用的使用 C語言中聯(lián)合體/共
    發(fā)表于 02-28 10:05

    結(jié)構(gòu)struct和聯(lián)合體union的區(qū)別

    結(jié)構(gòu)struct和聯(lián)合體union的區(qū)別
    發(fā)表于 10-11 08:21

    C語言結(jié)構(gòu)聯(lián)合體嵌套使用的實用操作

    ? 結(jié)構(gòu)聯(lián)合體C語言中的構(gòu)造類型,結(jié)構(gòu)我們平
    的頭像 發(fā)表于 12-24 16:07 ?5556次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>、<b class='flag-5'>聯(lián)合體</b>嵌套使用的實用操作

    什么是C語言聯(lián)合體

    名{ 成員列表 }; 共用有時也被稱為聯(lián)合或者聯(lián)合體,這也是 Union 這個單詞的本意。 結(jié)構(gòu)
    的頭像 發(fā)表于 07-29 15:35 ?3801次閱讀
    什么是<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>聯(lián)合體</b>

    看一下結(jié)構(gòu)聯(lián)合體結(jié)合使用在C語言與嵌入式中的一些實用技巧

    結(jié)構(gòu)聯(lián)合體C語言中的構(gòu)造類型,結(jié)構(gòu)我們平時應(yīng)
    發(fā)表于 05-08 10:19 ?4322次閱讀
    看一下<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>、<b class='flag-5'>聯(lián)合體</b>結(jié)合使用在<b class='flag-5'>C</b><b class='flag-5'>語言</b>與嵌入式中的一些實用技巧

    經(jīng)典 C 語言編程,結(jié)構(gòu)聯(lián)合體如何共用?

    中可以 使用 sizeof 進行獲取,默認為字節(jié)對齊的大小。 聯(lián)合體 聯(lián)合體的參數(shù)共享同一個內(nèi)存地址,所占的內(nèi)存大小完全是由聯(lián)合體中參數(shù)類型決定字長,然后數(shù)據(jù)共享,內(nèi)存共享等。 結(jié)構(gòu)
    的頭像 發(fā)表于 01-11 18:24 ?1501次閱讀
    經(jīng)典 <b class='flag-5'>C</b> <b class='flag-5'>語言</b>編程,<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和<b class='flag-5'>聯(lián)合體</b>如何共用?
    主站蜘蛛池模板: 天天舔天天干 | 97综合久久 | 美女露出尿口让男人桶爽网站 | 亚洲亚洲人成网站在线观看 | 日日噜噜夜夜狠狠tv视频免费 | 色网站免费看 | 日本www网站 | 办公室桌震娇喘视频大全在线 | 久久免费公开视频 | 欧美天天在线 | 日韩精品视频免费在线观看 | 欧美在线一区二区三区 | 迅雷www天堂在线资源 | 天天操夜操 | 色综合免费视频 | 成 年 人 视频在线播放 | 狠狠色依依成人婷婷九月 | 亚洲午夜精品一区二区 | 久久青草91线频免费观看 | 免费一级毛片不卡在线播放 | 九九热在线视频观看这里只有精品 | 国产亚洲一区二区在线观看 | 日本写真高清视频免费网站网 | 午夜黄大色黄大片美女图片 | 日韩高清性爽一级毛片免费 | 亚洲开心激情网 | 男女性生动态免费视频 | 性欧美高清精品videos | 亚洲我射 | 综合免费视频 | 亚洲成人精品 | 欧美无遮挡一区二区三区 | 国产视频国产 | 三级免费黄色片 | 欧美专区在线播放 | 欧美一级特黄aa大片 | xxxx性×xx| freesexvideo性欧美tv| 欧美人成一本免费观看视频 | 国产精品怡红院永久免费 | 午夜神马福利影院 |