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