Python Glossary English

все 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Сообщить о неточности