Почему распакованный шорт неверно истолкован?

Я распаковываю заголовок UDP (который сам является полезной нагрузкой ответа ICMP). Я пытаюсь получить номера портов источника и назначения.

Вот соответствующая часть кода:

udp_head = struct.unpack('HHHH', data[48:56])
print udp_head
print binascii.hexlify(struct.pack('H', udp_head[1]))

Запуск этого дает мне следующий результат:

(42389, 39554, 2048, 61179)
829a

Это частично неправильно и частично правильно. Порт назначения (второй элемент в списке) должен быть 33434. Таким образом, он неправильно печатает в первой строке. Но во второй строке это правильно (0x829A == 33434).

Есть идеи, почему это происходит?

1 ответ

Решение

Это дает вам подсказку?

>>> print hex(33434)
0x829a
>>> print hex(39554)
0x9a82
>>>

Это, вероятно, проблема порядка байтов.

Другие вопросы по тегам