这不是任何编程语言特有的问题.假设你有一些在big-endian机器上写的文件,你知道这一点.如果两个单字节值背靠背写,你怎么知道?Big-endian会反转16位,32位和64位值的顺序,那么您如何知道需要将其作为单个字节读取?
例如,您写入字节0x11,然后写入字节0x22.然后该文件包含0x1122.如果你在一台小端机器上看到它,你必须转换它.所以你会把它读成2211还是1122?你知道吗?
这有意义吗?我觉得我在这里缺少一些超级基本的东西.
没有办法知道.这就是为什么正式指定的文件格式通常要求字节序,或者它们提供一个选项(如unicode,如MSN所提到的).这样,如果您正在阅读具有特定格式的文件,那么您已经知道它已经是big-endian,因为它采用该格式的事实意味着特定的字节序.
另一个很好的例子是网络字节顺序 - 网络协议通常是大端的,所以如果你是一个与互联网交谈的小端处理器,你必须向后写东西.如果你是big-endian,你不需要担心它.人们使用像htonl和ntohl这样的函数来预处理他们写入网络的东西,以便他们的源代码在所有机器上都是相同的.这些函数被定义为在big-endian机器上什么都不做,但它们在little-endian机器上翻转字节.
关键的实现是字节序是特定架构如何表示单词的属性.他们不得不以某种方式编写文件 ; 它只是告诉你,架构上的指令要求多字节字以某种方式对其字节进行排序.big-endian机器可以编写与little-endian机器相同的字节序列,它可能会使用更多的指令来执行它,因为它必须重新排序字节.编写大端格式的小端机器也是如此.