在大端架构中提取RTP序列

时间:2018-09-05 18:49:33

标签: sequence endianness rtp

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

1 个答案:

答案 0 :(得分:1)

不,您在两种体系结构上使用相同的代码。重要的是数据的字节序格式,而不是那样操作时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的字节序。