在大端架构中提取 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.
的字节顺序
为了在小端架构中提取 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.