聯合體加結構體的應用

2021-08-19 18:26:39 字數 754 閱讀 9195

因為最近設計到通訊協議。而通訊協議中為了減少資料量,常常用乙個位元組的八個位分別代表八種不同的狀態。這就涉及到位的操作和分解。過程可能比較麻煩而且如果位數多的表示可能不是很明了,(比如我乙個位元組的前三個位元組表示狀態,後面的分別乙個位元組表示其他情況)。所以這邊利用了聯合體和結構體的綜合應用。用乙個結構體來表示位操作,比如我定義乙個8位的操作

typedef union

unsigned char sum;

struct bit;

)struct_bit;

上面的結構體,就表示將乙個位元組八位分別拿出來表示你要將其中的幾個位怎麼應用。切記,一定是無符號型別的。如果有符號。則會出錯。冒號後面的數字表示這個位占用了幾個位元組。在gcc的編譯下,如果你賦值的位太大,則編譯不通過會報錯。比如你定義了這麼乙個變數。struct_bit temp,然後這樣賦值 temp.bit.bit1 = 2; 這樣就會出錯。因為bit1只分配了一位。而2則要用兩位表示。還有一點就是,位元組的大小端問題。小弟這邊用的是小端模式。所以高位元組放在高位址處。所以bit1表示第0位,bit5表示高四位。如果你這樣賦值:

temp.bit.bit1 = 1;

temp.bit.bit2 = 0;

temp.bit.bit3 = 0;

temp.bit.bit4 = 1;

temp.bit.bit5 = 5;

則temp.sum = 89。化為二進位制為01011001;

雖然是個簡單的東西。不過,在一些通訊協議中的話,還是很好用的,希望能幫到有需要的人。

結構體聯合體

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

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

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

結構體 聯合體 列舉

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