Python Glossary English

все Python 3socketфункция

socket.ntohl()

преобразование адресов и порядка байтов

Переводит 32-битное число из сетевого порядка байтов (big-endian) в порядок машины; обратна htonl().

Синтаксис

socket.ntohl(x) -> int

Функция работает с int, а из сокета приходят bytes, и именно здесь путаются: ntohl применяют к числу, прочитанному в порядке машины. Проще сразу прочитать байты в нужном порядке — int.from_bytes(data, 'big') или struct.unpack('!I', data) — и ntohl не понадобится. Повторный вызов отменяет первый: ntohl(htonl(x)) == x.

Примеры

import socket, struct, sys
data = b'\x00\x00\x01\x00'  # 256 в сетевом порядке
print(socket.ntohl(int.from_bytes(data, sys.byteorder)))  # → 256
print(int.from_bytes(data, 'big'))  # → 256
print(struct.unpack('!I', data)[0])  # → 256
print(socket.ntohl(socket.htonl(123456)))  # → 123456

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности