Предоставляет ли golang htonl/htons?
В программировании на C, когда я хочу отправить целое число по сети, нам нужно использовать htonl() или htons() для преобразования целого из байта хоста
к порядку байта сети перед отправкой.
Но в golang я проверил сетевой пакет и не могу найти похожие функции, такие как htons/htonl. Итак, как мне отправить целое число при использовании golang? Мне нужно реализовать htons/htonl
сам?
Ответы
Ответ 1
Порядок сетевых байтов просто большой, поэтому вы можете использовать encoding/binary
пакет для выполнения кодировки.
Например:
data := make([]byte, 6)
binary.BigEndian.PutUint16(data, 0x1011)
binary.BigEndian.PutUint32(data[2:6], 0x12131415)
В качестве альтернативы, если вы пишете на io.Writer
, функция binary.Write()
из того же пакета может быть более удобной (опять же, используя значение binary.BigEndian
как аргумент order
).
Ответ 2
Я думаю, что вы находитесь за ByteOrder
в encoding/binary
.
A ByteOrder указывает, как преобразовать последовательности байтов в 16-, 32- или 64-разрядные целые числа без знака.