聯合體,結構體妙用法(摘自: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 關...