23

C プログラミングでは、整数をネットワーク経由で送信する場合、htonl() または htons() を使用して整数をホスト バイト オーダーからネットワーク バイト オーダーに変換してから送信する必要があります。

しかし、golang で net パッケージを確認したところ、htons/htonl のような同様の関数が見つかりません。では、golang を使用する場合、どのように整数を送信すればよいでしょうか? 自分で htons/htonl を実装する必要がありますか?

4

2 に答える 2

29

ネットワーク バイト オーダーは単なるビッグ エンディアンであるため、encoding/binaryパッケージを使用してエンコードを実行できます。

:

data := make([]byte, 6)
binary.BigEndian.PutUint16(data, 0x1011)
binary.BigEndian.PutUint32(data[2:6], 0x12131415)

あるいは、 に書き込んでいる場合は、同じパッケージio.Writerbinary.Write()関数の方が便利かもしれません (ここでもbinary.BigEndian値をorder引数として使用します)。

于 2013-09-25T03:14:52.197 に答える
5

ByteOrderあなたが求めているのはにencoding/binaryあると思います。

ByteOrder は、バイト シーケンスを 16、32、または 64 ビットの符号なし整数に変換する方法を指定します。

于 2013-09-25T03:14:41.167 に答える