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

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

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

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

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

嵌入式應用開發(fā) ? 來源:嵌入式應用開發(fā) ? 作者:嵌入式應用開發(fā) ? 2022-12-03 14:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應該都用得很多。但是,對于聯(lián)合體,一些初學的朋友可能用得并不多,甚至感到陌生。我們先來簡單看一下聯(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)體建立一一對應關(guān)系,我們需要用哪一結(jié)構(gòu)體數(shù)據(jù)就通過data_pkg_type來進行選中。

在進行數(shù)據(jù)組包的時候,先給data_pkg_type進行賦值,確定數(shù)據(jù)包的類型,再給對應的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è)計得很復雜,包含一些協(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)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3125

    瀏覽量

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

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

    關(guān)注

    1

    文章

    131

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

    一、基礎(chǔ)概念與核心差異 1.1 結(jié)構(gòu)(Struct)的本質(zhì) **結(jié)構(gòu)C語言中實現(xiàn)數(shù)據(jù)封裝的
    發(fā)表于 04-08 09:18

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

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

    DLL導入結(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)合體?

    我先定義一個聯(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 ?5843次閱讀
    <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 ?4105次閱讀
    什么是<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)我們平時應
    發(fā)表于 05-08 10:19 ?4490次閱讀
    看一下<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 ?1855次閱讀
    經(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>如何共用?