一个对RTCP按bit赋值的简单编程方法

简介: 一个对RTCP按bit赋值的简单编程方法

近再对RTCP信令处理方法进行优化。但发现规范中RTCP的头部区域很多按BIT赋值的规定。

如规范rfc4585(RTP/AVPF)中 rtcp的头部格式如下。

 

8c968b953bc14e7380412b6212787320.png


对于这样的格式如何快速对于RTCP的头部进行赋值呢?


具体如下,可以使用bit赋值的方式。下面上干货,具体局方见代码。


#include <stdlib.h>
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
struct RTCPFBHeader
{
#ifdef RTP_BIG_ENDIAN
  uint8_t version:2;
  uint8_t padding:1;
  uint8_t fmt:5;
#else // little endian
  uint8_t fmt:5;
  uint8_t padding:1;
  uint8_t version:2;
#endif // RTP_BIG_ENDIAN
  uint8_t packettype;
  uint16_t length;
};
int main()
{
   char rtcpdata[]={0x83,0xcd,0x00,0x04,0x0e,0x5e,0xb3,0xe1,0x00,0x00,0x00,0x00,0x99,0x4a,0x2a,0x67};
   RTCPFBHeader *rtcphd = (RTCPFBHeader*)rtcpdata;
   RTCPFBHeader sheader = *rtcphd;
   printf("sheader.fmt=%d\n",sheader.fmt);
   return 1;
}


通过按位赋值的方式可以快速赋值,起到事倍功半的作用。

相关文章
|
10月前
位运算符&和>>配合给有位域的结构体赋值
v位运算符&和>>配合给有位域的结构体赋值
43 0
|
C语言
写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明(C语言)
写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明(C语言)
98 0
|
9月前
|
存储 编译器 C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
81 2
|
9月前
|
编译器 Linux C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)二
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)二
76 1
|
10月前
|
JavaScript 前端开发
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
56 1
|
Python
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
|
10月前
|
C语言
C语言计数控制循环的深入解析
C语言计数控制循环的深入解析
210 0
|
10月前
|
C语言
C语言中形参列表为指针的三种不同swap函数的通俗理解
C语言中形参列表为指针的三种不同swap函数的通俗理解
87 0
|
10月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
96 0
|
C语言
C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1
思路一:使用 %2 和 /2 取出每一位并判断 总体思路: (一). 创建函数,参数要设置成无符号整数,设置计数器计算1的个数 (二). 使用 while循环 循环判断二进制每一位, 使用 %2 判断最低位是否为 1, 使用 /2 去掉判断了的最低位,下次循环开始判断新的最低位
 C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1