結構體中的位定義

2021-09-29 15:09:41 字數 1182 閱讀 3648

1.結構體位定義

在工作中,經常遇到按位(bit)定義結構體 的情況。由於乙個位元組有8個位,這時,程式設計師往往對bit的位置產生困惑。現在給出2個例子,來說明位的定義次序。

第乙個例子是將unsigned char 分成8個位元。

#pragma pack(push,1)

typedef

struct st_test

st_test;

#pragma pack(pop)

#include

#include

intmain

(void

)

結果是0x41,也就是二進位制的0b01000001。

可見,定義在一開頭的uca反而落到了最後,而倒數第二的ucg起始在左起正數第二。

所以,結構體裡定義位元,次序起始是反的

2.例項

現定義陣列及含義如下:

data[0]

=chargerbox_state;

data[1]

=chargerbox_battery_level;

data[2]

=0x00

;typedef

struct chargerbox_state

chargerbox_state;

在 xcom接收到資料為

88

1500

即data[0]

=88;data[1]

=15;data[2]

=00;

其中,88 二進位制為 1000 1000;

對應到結構體中

uint8_t reserved:3;

uint8_t open:1;

unin8_t chargeredbyusb:0;

uint8_t chargeredbywireless:0;

uint8_t left_ear_in_chargerbox:0;

uint8_t right_ear_in_chargerbox:

1;

結構體中的位域

位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區...

結構體中的位域

位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區...

結構體中的位域

結構體中的位域 位域有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域...