все Python 3socketфункция
socket.htonl()
преобразование адресов и порядка байтов
Переводит 32-битное число из порядка байтов машины в сетевой (big-endian); результат — снова int.
Синтаксис
socket.htonl(x) -> int
На big-endian машине функция ничего не делает, на little-endian (почти все ПК и телефоны) переставляет 4 байта — поэтому htonl(1) печатает 16777216 и пугает. Это наследие C API; в Python поле протокола обычно упаковывают сразу в байты: struct.pack('!I', n) или n.to_bytes(4, 'big'). Отрицательные числа и значения больше 2**32-1 не принимаются.
Примеры
import socket, struct
print(socket.htonl(1)) # → ? 16777216 на little-endian
print(struct.pack('!I', 1)) # → b'\x00\x00\x00\x01'
print((1).to_bytes(4, 'big')) # → b'\x00\x00\x00\x01'
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности