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.Writer,则binary.Write()来自同一包的函数可能更方便(同样,使用binary.BigEndian值作为order参数)。

于 2013-09-25T03:14:52.197 回答
5

我想你所追求的是ByteOrderencoding/binary.

ByteOrder 指定如何将字节序列转换为 16、32 或 64 位无符号整数。

于 2013-09-25T03:14:41.167 回答