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


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

相关文章
|
3月前
|
存储 程序员 C++
在C++编程语言中指针的作用类型
在C++编程语言中指针的作用类型
46 0
|
3月前
|
编译器 C语言
嵌入式C语言变量、数组、指针初始化的多种操作
嵌入式C语言变量、数组、指针初始化的多种操作
40 0
|
1月前
|
C语言
C语言15---在VC中变量的注意点和变量的注意细节
C语言15---在VC中变量的注意点和变量的注意细节
|
2月前
|
设计模式 安全 Go
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
21 2
|
10月前
|
Python
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
|
3月前
火山中文编程(PC) -- 变量与常量
火山中文编程(PC) -- 变量与常量
36 1
|
10月前
|
Go
Go 语言为什么建议定义零值可用的结构体?
Go 语言为什么建议定义零值可用的结构体?
49 0
VC8常用汇编 指针型变量赋值
VC8常用汇编 指针型变量赋值
|
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
|
存储 Rust JavaScript
Rust:为什么不能在同一个结构体中存储一个值和对该值的引用?(修改版)
基本把下面问题这个搞明白,就能彻底明白 Rust 语言的生命周期是怎么回事了。简而言之,生命周期不会改变你的代码,是你的生命控制生命周期,而不是生命周期在控制你的代码。换言之,生命周期是描述性的,而不是规定性的。
157 0