C プログラミングでは、整数をネットワーク経由で送信する場合、htonl() または htons() を使用して整数をホスト バイト オーダーからネットワーク バイト オーダーに変換してから送信する必要があります。
しかし、golang で net パッケージを確認したところ、htons/htonl のような同様の関数が見つかりません。では、golang を使用する場合、どのように整数を送信すればよいでしょうか? 自分で htons/htonl を実装する必要がありますか?
C プログラミングでは、整数をネットワーク経由で送信する場合、htonl() または htons() を使用して整数をホスト バイト オーダーからネットワーク バイト オーダーに変換してから送信する必要があります。
しかし、golang で net パッケージを確認したところ、htons/htonl のような同様の関数が見つかりません。では、golang を使用する場合、どのように整数を送信すればよいでしょうか? 自分で htons/htonl を実装する必要がありますか?
ネットワーク バイト オーダーは単なるビッグ エンディアンであるため、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
引数として使用します)。
ByteOrder
あなたが求めているのはにencoding/binary
あると思います。
ByteOrder は、バイト シーケンスを 16、32、または 64 ビットの符号なし整数に変換する方法を指定します。