一个对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中变量的注意点和变量的注意细节
|
6月前
|
Java
Java 基础深度解析:变量与常量的声明、赋值与初始化的权威指南
【6月更文挑战第14天】Java编程中的变量和常量是基础关键。声明变量如`int age;`,赋值与初始化可在声明时或后续代码中完成。常量用`final`修饰,如`public static final double PI = 3.14159;`,且只能赋值一次。变量命名应具描述性,常量值设定后尽量不变,注重代码的可读性和可维护性。熟练掌握这些将有助于编写高质量Java程序。
82 4
|
7月前
|
5G
MFC编程 -- 浮点数与字符串之间转换
MFC编程 -- 浮点数与字符串之间转换
120 1
|
7月前
火山中文编程(PC) -- 变量与常量
火山中文编程(PC) -- 变量与常量
68 1
|
Go
Go 语言为什么建议定义零值可用的结构体?
Go 语言为什么建议定义零值可用的结构体?
69 0
|
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
|
Java 编译器 C语言
学C的第四天(各种操作符补充;简单了解多种关键字,define定义常量和宏,结构体)(2)
[被static修饰的变量(静态变量)和全局变量的区别:都存放在静态区中,但静态变量的作用域还是在局部,全局变量的作用域是任意地方,两者生命周期相同,都是程序结束才销毁] 2.修饰全局变量 - 称为静态全局变量 (未使用static时:)
|
存储 Rust JavaScript
Rust:为什么不能在同一个结构体中存储一个值和对该值的引用?(修改版)
基本把下面问题这个搞明白,就能彻底明白 Rust 语言的生命周期是怎么回事了。简而言之,生命周期不会改变你的代码,是你的生命控制生命周期,而不是生命周期在控制你的代码。换言之,生命周期是描述性的,而不是规定性的。
188 0
蓝桥杯小技巧之巧用bit类型定义变量
蓝桥杯小技巧之巧用bit类型定义变量
84 0