Извлечение последовательности RTP в архитектуре с прямым порядком байтов - PullRequest
0 голосов
/ 05 сентября 2018

Для извлечения порядкового номера заголовка RTP в архитектуре с прямым порядком байтов используется следующий тип беззнаковый короткий seq = (пакет [2] << 8) | пакет [3]; В большом порядке байтов следующее беззнаковый короткий seq = (пакет [3] << 8) | пакет [2]? * * тысяча один

1 Ответ

0 голосов
/ 05 сентября 2018

Нет, вы используете один и тот же код на обеих архитектурах. Когда вы делаете это таким образом, важен формат данных с прямым порядком, а не порядок вашего процессора.

Порядковый номер 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) независимым от порядкового номера вашего процессора.

...