все Python 3socketфункция
socket.htons()
преобразование адресов и порядка байтов
Переводит 16-битное число из порядка байтов машины в сетевой (big-endian); результат — снова int.
Синтаксис
socket.htons(x) -> int
Частое недоумение: функция возвращает не bytes, а число с переставленными байтами, и на little-endian машине htons(80) равно 20480. Для упаковки в байты удобнее struct.pack('!H', n) или n.to_bytes(2, 'big') — порядок задан явно и результат сразу готов к отправке. С 3.10 число больше 65535 даёт OverflowError (раньше обрезалось с одним лишь DeprecationWarning), а отрицательное с 3.14 — ValueError.
Примеры
import socket, sys
x = socket.htons(80)
print(type(x).__name__) # → int
print(x == int.from_bytes((80).to_bytes(2, 'big'), sys.byteorder)) # → True
print(x) # → ? 20480 на little-endian (x86, ARM)
# Python 3.10+
import socket
socket.htons(70000) # → OverflowError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности