在大端架构中提取 RTP 序列

Extract RTP sequence in big endian architecture

为了在小端架构中提取 RTP header 的序列号,使用以下类型 unsigned short seq = (packet[2] << 8) |数据包[3]; 在大端中,以下是正确的 无符号短序列 = (数据包 [3] << 8) |数据包[2]?

不,您在两种架构上使用相同的代码。当您这样做时,重要的是数据的字节序格式,而不是 CPU 的字节序。

根据协议规范,RTP 序列号以最高有效字节在前和最低有效字节在后的方式存储。因此,如果序列号是 0x1234(或十进制的 4660),它将存储在您的 2 个字节 packet[2]packet[3] 中,如

packet byte   0   1   2   3
             +---+---+---+---+
             |...|...|12 |34 |
             +---+---+---+---+

现在您想提取字节 2 并将其作为整数中的最高有效字节,并将字节 3 放在最低有效位,这就是代码:

uint16_t seq = (packet[2] << 8) | packet[3];

这使得 seq 的值 0x1234(或 4660 十进制)独立于 CPU.

的字节顺序