概述
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;
最后
以上就是魁梧哈密瓜为你收集整理的c++中结构体位域使用注意事项的全部内容,希望文章能够帮你解决c++中结构体位域使用注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复