結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時(shí)應(yīng)該都用得很多。但是,對(duì)于聯(lián)合體,一些初學(xué)的朋友可能用得并不多,甚至感到陌生。我們先來簡單看一下聯(lián)合體:
union 聯(lián)合名
{
成員表
};
成員表中含有若干成員,成員的一般形式為:類型說明符 成員名。其占用的字節(jié)數(shù)與成員中最大數(shù)據(jù)類型占用的字節(jié)數(shù)。
下面用代碼進(jìn)行理解:
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三個(gè)結(jié)構(gòu)體放到了struct data_pkg這個(gè)結(jié)構(gòu)體里進(jìn)行管理,把data_pkg_type與union里的三個(gè)結(jié)構(gòu)體建立一一對(duì)應(yīng)關(guān)系,我們需要用哪一結(jié)構(gòu)體數(shù)據(jù)就通過data_pkg_type來進(jìn)行選中。
在進(jìn)行數(shù)據(jù)組包的時(shí)候,先給data_pkg_type進(jìn)行賦值,確定數(shù)據(jù)包的類型,再給對(duì)應(yīng)的union里的結(jié)構(gòu)體進(jìn)行賦值;在進(jìn)行數(shù)據(jù)解析的時(shí)候,通過data_pkg_type來選擇解析哪一組數(shù)據(jù)。

結(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è)計(jì)得很簡單,比如全是有用的數(shù)據(jù),或是設(shè)計(jì)得很復(fù)雜,包含一些協(xié)議頭尾、包長、有效數(shù)據(jù)、校驗(yàn)等內(nèi)容。
但無論如何,我們組包發(fā)送的過程是填充結(jié)構(gòu)體->發(fā)送data_buffer;反之接收數(shù)據(jù)解析的過程就是接收數(shù)據(jù)存于data_buffer->使用結(jié)構(gòu)體數(shù)據(jù)。
審核編輯:湯梓紅
-
內(nèi)存
+關(guān)注
關(guān)注
9文章
3209瀏覽量
76358 -
C語言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145570 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
131瀏覽量
11371
發(fā)布評(píng)論請(qǐng)先 登錄
C語言聯(lián)合體的巧妙運(yùn)用
C語言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場(chǎng)景
一個(gè)經(jīng)典的結(jié)構(gòu)體和聯(lián)合體共用的實(shí)例
430編程C語言常識(shí)(IAR)之結(jié)構(gòu)體與聯(lián)合體
DLL導(dǎo)入結(jié)構(gòu)體 聯(lián)合體
為什么位域結(jié)構(gòu)體與聯(lián)合體一起使用?
結(jié)構(gòu)體與共用體的區(qū)別
結(jié)構(gòu)體和聯(lián)合體的區(qū)別到底在哪里
如何利用聯(lián)合體去判斷大小端呢
聯(lián)合體/共用體的使用方法
結(jié)構(gòu)體struct和聯(lián)合體union的區(qū)別?
看一下結(jié)構(gòu)體、聯(lián)合體結(jié)合使用在C語言與嵌入式中的一些實(shí)用技巧
經(jīng)典 C 語言編程,結(jié)構(gòu)體和聯(lián)合體如何共用?
c語言中結(jié)構(gòu)體有聯(lián)合體的區(qū)別
評(píng)論