我们知道字节序与计算机存储数据的方式有关。大端计算机体系结构包括 IBM 370、Motorola 68000 和 Sun Sparc。 Little endian 计算机包括 intel 系列(80486、pentium 等)和 VAX。
由于 JVM,Java 始终是 Big-Endian。 由于协议(protocol)的原因,网络应该始终是大端。
- C、C++ 和 C# 取决于它们运行的计算机?
- 由于协议(protocol)的缘故,网络应该始终是 Big-Endian。如果我们在发送之前不调用 htons 和 htonl 会怎么样?如果发送方是 intel 机器上的 C++,则发送的数据将是 Little-endian。对吗?
- 所以我们不需要关心字节顺序(调用ntohl 和htonl),如果我们知道所有的客户端和服务器将使用具有相同体系结构的计算机并且将使用相同的程序语言。对吗?
最佳答案
- 至少对于 C 和 C++,是的;字节顺序通常取决于机器(但也可能取决于编译器)。对于 C#,我不知道。
- 很多网络协议(protocol)都是大端的,是的。如果您不调用
htonl
,那么您将不会在小端机器上创建有效数据包。 - 因此您应该始终调用
htonl
等(或您使用的任何语言中的等效项)。因为即使您今天的环境是同质的,但几乎可以肯定的是,将来这种情况会发生变化。
更具体地说,您应该始终尽可能靠近界面并在一个地方进行转换。如果字节顺序转换调用散布在您的代码库中,则很难判断您的代码是否合理。
关于c# - 字节序、语言、硬件和网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932424/