C++位域

一、位域

参考:C++位域【简单记录】 - 知乎 (zhihu.com)

大概就是压缩数据量,你指定多少位存储就是多少位

二、问题的引出

要用12字节大小存储同步信源以及之前的怎么做?

V(2) P(1) X(1) CC(4) M(1) PT(7) 序列号 (16)

​ 时戳 (32)

​ 同步信源(32)

​ 特约信源(32)

V 表示版本号,2 个 bit

P 表示填充位,1 个 bit。为 0 表示包尾部没有填充附加字节;为则表示有

X 表示扩展位,1 个 bit。为 1 表示包头后面还有一个扩展头部

CC 是 CSRC 个数,4bit。表示后面 CSRC 的个数 0~15 个

M 表示标记位,1 个 bit。给配置文档来用的

PT 表示荷载类型,7 个 bit。

序列号(SN),16 个 bit 时间戳,32 个 bit,记录数据荷载部分采样时刻

同步信源(SSRC)标识符,32 个 bit。标记 RTP 的来源,一个 RTP 会话中不能有两个 SSRC 值。

特约信源(CSRC)标识符,最多 15 个,每个都是 32 个 bit,一般不

三、结构体(类)定义

//默认值:
    csrccount = 0;
	extension = 0;
	padding = 0;
	version = 2;
	pytype = 96;
	mark = 0;
	serial = 0;
	timestamp = 0;
	ssrc = 0x98765432;
class RTPHead {
public:
	unsigned short csrccount : 4;
	unsigned short extension : 1;
	unsigned short padding : 1;              
	unsigned short version : 2;           //这里是一个字节  上面的存储顺序为 version padding extension
	unsigned short pytype : 7;
	unsigned short mark : 1;              //从这里,2个字节刚好是unsigned short的大小,刚好两个字节存储上面五个信息
	unsigned short serial;   
	unsigned timestamp;
	unsigned ssrc;
};           //sizeof(RTPHead) = 12
//那么在内存中表示    10 00 00 00  01 10 00 00 
//                前两位10是version             最后七位(1100000是96)
//                 00 00 00 00  00 00 00 00   (serial)
//                 00 00 00 00  00 00 00 00
//                 00 00 00 00  00 00 00 00   (timestamp)
//                 00 00 00 00  00 00 00 00
//                 00 00 00 00  00 00 00 00   (ssrc)
//把short去掉
class RTPHead {
public:
	unsigned csrccount : 4;
	unsigned extension : 1;
	unsigned padding : 1;              
	unsigned version : 2;           //这里是一个字节  上面的存储顺序为 version padding extension
	unsigned pytype : 7;
	unsigned mark : 1;              //从这里,2个字节小于unsigned的大小,那么就会用两个字节存储上面五个信息,剩下两个字节                                     //为用0填充
	unsigned short serial;   
	unsigned timestamp;
	unsigned ssrc;
};           //sizeof(RTPHead) = 14
//那么在内存中表示    10 00 00 00  01 10 00 00 
//                前两位10是version             最后七位(1100000是96)
//                 00 00 00 00  00 00 00 00    (这一行是填充的,如果没有置0则随机)
//                 00 00 00 00  00 00 00 00   (serial)
//                 00 00 00 00  00 00 00 00   (timestamp)
//                 00 00 00 00  00 00 00 00
//                 00 00 00 00  00 00 00 00   (ssrc)
     00 00 00 00  00 00 00 00

// 00 00 00 00 00 00 00 00 (ssrc)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值