結構體中的位定義
阿新 • • 發佈:2019-02-04
在工作中,經常遇到按位(bit)定義結構體 的情況。由於一個位元組有8個位,這時,程式設計師往往對bit的位置產生困惑。現在給出一個例子,來說明位的定義次序。
結果是0x41,也就是二進位制的0b01000001.可見,定義在一開頭的ucA反而落到了最後,而倒數第二的ucG起始在左起正數第二。所以,結構體裡定義位元,次序起始是反的。#pragma pack(push,1) typedef struct ST_TEST { unsigned char ucA:1; unsigned char ucB:1; unsigned char ucC:1; unsigned char ucD:1; unsigned char ucE:1; unsigned char ucF:1; unsigned char ucG:1; unsigned char ucH:1; } ST_TEST; #pragma pack(pop) #include <string.h> #include <stdio.h> int main(void) { ST_TEST stTest; stTest.ucA = 1; stTest.ucB = 0; stTest.ucC = 0; stTest.ucD = 0; stTest.ucE = 0; stTest.ucF = 0; stTest.ucG = 1; stTest.ucH = 0; unsigned char ucTest; memcpy(&ucTest, &stTest, 1); //沒有現成的列印二進位制的方法,所以用16進位制列印 printf("%x", ucTest); scanf("%c", &ucTest); return 0; }