一个对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;
}


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

相关文章
|
7月前
|
编译器 C语言
嵌入式C语言变量、数组、指针初始化的多种操作
嵌入式C语言变量、数组、指针初始化的多种操作
51 0
|
5月前
|
C语言
C语言15---在VC中变量的注意点和变量的注意细节
C语言15---在VC中变量的注意点和变量的注意细节
|
5月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
59 1
|
6月前
|
Java
Java 基础深度解析:变量与常量的声明、赋值与初始化的权威指南
【6月更文挑战第14天】Java编程中的变量和常量是基础关键。声明变量如`int age;`,赋值与初始化可在声明时或后续代码中完成。常量用`final`修饰,如`public static final double PI = 3.14159;`,且只能赋值一次。变量命名应具描述性,常量值设定后尽量不变,注重代码的可读性和可维护性。熟练掌握这些将有助于编写高质量Java程序。
82 4
|
Python
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
|
7月前
|
5G
MFC编程 -- 浮点数与字符串之间转换
MFC编程 -- 浮点数与字符串之间转换
120 1
|
存储 安全 编译器
02-📝C++核心语法|C++对C的扩展【::作用域运算符、名字控制、struct类型加强、C/C++中的const、引用(reference)、函数】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
02-📝C++核心语法|C++对C的扩展【::作用域运算符、名字控制、struct类型加强、C/C++中的const、引用(reference)、函数】
|
Java 数据安全/隐私保护
java实现请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,使c1、c2、c3、c4、c5变为’G’、’l’、’m’、’r’、’e
java实现请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,使c1、c2、c3、c4、c5变为’G’、’l’、’m’、’r’、’e
|
存储 编译器 程序员
【C语言】存储类别(作用域、链接、存储期)、内存管理和类型限定符(主讲const)(二)
【C语言】存储类别(作用域、链接、存储期)、内存管理和类型限定符(主讲const)
|
存储 编译器 程序员
【C语言】存储类别(作用域、链接、存储期)、内存管理和类型限定符(主讲const)(一)
关键字:auto、extern、static、register、const、volatile、restricted、_Thread_local、_Atomic 函数:rand()、srand()、time()、malloc()、calloc()、free() 如何确定变量的作用域(可见的范围)和生命期(它存在多长时间) 设计更复杂的程序