Network programming golang是否提供htonl/htons?

Network programming golang是否提供htonl/htons?,network-programming,go,Network Programming,Go,在C编程中,当我想通过网络发送一个整数时,我们需要使用htonl()或htons()从主机字节顺序转换整数 在发送之前,先将字节顺序发送到网络 但是在golang,我检查了net包,没有找到类似的函数,比如htons/htonl。那么在使用golang时,我应该如何发送一个整数呢?我是否需要实施htons/htonl 我自己?我想你想要的是 字节顺序指定如何将字节序列转换为16、32或64位无符号整数 网络字节顺序只是big-endian,因此您可以使用包来执行编码 : 或者,如果您正在写入一个

在C编程中,当我想通过网络发送一个整数时,我们需要使用htonl()或htons()从主机字节顺序转换整数 在发送之前,先将字节顺序发送到网络

但是在golang,我检查了net包,没有找到类似的函数,比如htons/htonl。那么在使用golang时,我应该如何发送一个整数呢?我是否需要实施htons/htonl
我自己?

我想你想要的是

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


网络字节顺序只是big-endian,因此您可以使用包来执行编码

:


或者,如果您正在写入一个
io.Writer
,来自同一个包的
binary.Write()
函数可能更方便(同样,使用
binary.BigEndian
值作为
order
参数)。

提示:binary.Read()可用于直接从网络连接读取数据。在big-endian机器上运行如何?既然代码交换字节,它不会弄糟吗?nvm看起来像是使用移位,所以它在所有平台上都能正常工作。对
binary.BigEndian
读取BigEndian数据并将其写入
[]字节
片,无论您在哪个体系结构上运行。从字节交换的角度考虑它会使事情变得复杂。在需要
uint16
socket()
或其他系统调用中如何使用它?binary.BigEndian.PutUint16()以正确的顺序提供字节,但它们需要转换为
uint16
才能使用。如果我使用相同的
binary.BigEndian
lib,它只会使它们回到主机顺序。
data := make([]byte, 6)
binary.BigEndian.PutUint16(data, 0x1011)
binary.BigEndian.PutUint32(data[2:6], 0x12131415)