Распаковка номера порта в коде с прямым порядком байтов - PullRequest
1 голос
/ 08 августа 2010

Я пытаюсь преобразовать 2-байтовую строку с прямым порядком байтов в числовой номер порта.У меня уже есть некоторый код, но я понятия не имею, если он прав:

from struct import unpack
def unpack_port(big_endian-port):
   return unpack("!H", big_endian-port)[0]

Порт (с помощью Python repr ()) - это \ x1a \ xe1, и я получаю 6881 из этой функции.

Это правильно?

1 Ответ

3 голосов
/ 08 августа 2010

Да, !' - это символ, который говорит «сетевой порядок байтов», а 'H' - «16-разрядное целое число без знака», поэтому ваш код верен. 6881 обычно является портом Bittorrent.

В этом случае, я считаю, '!' - правильный символ. Поскольку это номер порта, я ожидаю, что ваши данные поступают из сети. Но, если бы вы знали, что ваши данные являются порядковыми номерами по какой-то другой причине, '>' может быть более подходящим. Они означают одно и то же и всегда будут. Это скорее вопрос комментирования вашего кода, чтобы указать намерение, чем любое семантическое различие.

...