在 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 位无符号整数。