結(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](https://file.elecfans.com/web2/M00/7F/88/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)存
+關(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
發(fā)布評論請先 登錄
相關(guān)推薦
C語言聯(lián)合體的巧妙運用
430編程C語言常識(IAR)之結(jié)構(gòu)體與聯(lián)合體
DLL導(dǎo)入結(jié)構(gòu)體 聯(lián)合體
聯(lián)合體問題
如何定義了這個聯(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語言與嵌入式中的一些實用技巧
![看一下<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>與嵌入式中的一些實用技巧](https://file1.elecfans.com/web2/M00/82/8C/wKgZomRYXLmAFE4gAAASWk2yAd8519.png)
經(jīng)典 C 語言編程,結(jié)構(gòu)體和聯(lián)合體如何共用?
![經(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>如何共用?](https://file1.elecfans.com/web2/M00/BC/2A/wKgZomWfwf-AU5JkAAAO1wRc0GU028.png)
評論