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語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域...