聯合體,結構體妙用法

2021-10-12 19:39:02 字數 1462 閱讀 2672

聯合體,結構體妙用法(摘自:zhengnl 嵌入式大雜燴)

在c語言中定義聯合體的關鍵字是union

定義乙個聯合型別的一般形式為:

union 聯合名

;實用技巧

1:示例**:

enum data_pkg_type

;struct data_pkg1

;struct data_pkg2

;struct data_pkg3

;struct data_pkg

data_pkg_info;

};這裡把struct data_pkg1、struct data_pkg2、struct data_pkg3三個結構體放到了struct data_pkg這個結構體裡進行管理,把data_pkg_type與union裡的三個結構體建立一一對應關係,我們需要用哪一結構體資料就通過data_pkg_type來進行選中。

在進行資料組包的時候,先給data_pkg_type進行賦值,確定資料報的型別,再給對應的union裡的結構體進行賦值;在進行資料解析的時候,通過data_pkg_type來選擇解析哪一組資料。

2:資料組合/拆分、大小端

#include 

typedef unsigned int  uint32_t;

typedef unsigned char uint8_t;

union bit32_data

byte;

};int main(void)

else if (0x78 == num.byte.byte3)

else{}

return 0;

}① 把0x12345678拆分成0x78、0x56、0x34、0x12:

例項**:

#include 

typedef unsigned int  uint32_t;

typedef unsigned char uint8_t;

union bit32_data

byte;

};int main(void)

② 把0x78、0x56、0x34、0x12組合成0x12345678:

#include 

typedef unsigned int  uint32_t;

typedef unsigned char uint8_t;

union bit32_data

byte;

};int main(void)

3:結構體 & 緩衝區

#define buf_size 16

union protocol_data

data_info;

};這種應用得很廣泛,用於自定義通訊協議。struct裡面的內容比如全是有用的資料,或是設計得很複雜,包含一些協議頭尾、包長、有效資料、校驗等內容。

4:傳輸浮點資料

示例**:

union f_data ;}

原文章詳見:

聯合體 位域結構體 聯合體的妙用

在c語言中,變數的定義是分配儲存空間的過程。一般的,每個變數都具有其獨有的儲存空間,那麼可不可以在同乙個記憶體空間中儲存不同的資料型別 不是同事儲存 呢?答案是可以的,使用聯合體就可以達到這樣的目的。聯合體也叫共用體,在c語言中定義聯合體的關鍵字是union。定義乙個聯合型別的一般形式為 union...

結構體聯合體

在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...

結構體 聯合體 列舉

1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...