c++中結構體位域使用注意事項
阿新 • • 發佈:2018-12-18
1、一個位域必須儲存在同一個單元中,不能跨兩個單元。如一個單元所剩空間不夠存放另一位域時,應從下一單元起存放該位域。如下
第一個unsigned short 中 沒有足夠的空間儲存system_clock_reference_base_29_15_,所以應當先將第一個unsigned short用'0'補齊,從下一個能夠容得下該資料的空間開始存放。
2、可以使用無名域位,這樣的域位作用只是用來補齊,不能使用。
3、一個空間的開始位置一定是從該空間大小的整數倍開始。
/** * PS packet header */ typedef struct ps_packet_header { unsigned char start_code[4]; // '0x00 00 01 ba', 32 bit, 4 byte unsigned short fix_code : 2; // must be '0x 01' unsigned short system_clock_reference_base_32_30_ : 3; unsigned short marker_bit_1 : 1; unsigned short : 0; //剩餘2bit用0補齊 unsigned short system_clock_reference_base_29_15_ : 15; unsigned short marker_bit_2 : 1; // 52 bit unsigned short system_clock_reference_base_14_0_ : 15; unsigned short marker_bit_3 : 1; // 70 bit unsigned short system_clock_reference_extension : 9; unsigned short marker_bit_4 : 1; // 80 bit, 10 Byte unsigned short : 0; //剩餘6bit用0補齊 unsigned int program_mux_rate : 22; unsigned int marker_bit_5 : 1; unsigned int marker_bit_6 : 1; // 104 bit, 13 Byte unsigned char reserved : 5; unsigned char pack_stuffing_length : 3; // 112 bit, 14 Byte }ps_packet_header_t;