这不是任何编程语言特有的问题。假设您在大端机器上编写了一些文件,并且您知道这一点。如果两个单字节值被连续写入,你怎么知道? Big-endian 颠倒了 16、32 和 64 位值的顺序,那么您如何知道需要将其作为单个字节读取呢?
例如,您写入字节 0x11,然后写入字节 0x22。然后该文件包含 0x1122。如果您在小端机器上读取该内容,则必须对其进行转换。那么你会把它读成 2211 还是 1122?你知道怎么做吗?
这有意义吗?我觉得我在这里缺少一些超级基本的东西。
没有办法知道。这就是为什么正式指定的文件格式通常要求字节序,或者提供一个选项(如 MSN 提到的 unicode)。这样,如果您正在读取特定格式的文件,您know它已经是大端字节序了,因为它采用这种格式这一事实意味着特定的字节序。
另一个很好的例子是网络字节顺序 http://en.wikipedia.org/wiki/Endianness#Endianness_in_networking-- 网络协议通常是大端字节序,因此如果您是与互联网通信的小端字节序处理器,则必须向后写入内容。如果您是大尾数,则无需担心。人们使用类似的功能赫托尔和恩托尔 http://www.opengroup.org/onlinepubs/007908799/xns/htonl.html预处理它们写入网络的内容,以便它们的源代码在所有机器上都相同。这些函数被定义为在大端机器上不执行任何操作,但它们在小端机器上翻转字节。
关键的认识是字节顺序是特定程度的属性架构代表单词。这不是他们必须写的命令files以某种方式;它只是告诉您架构上的指令期望多字节字的字节以某种方式排序。大端机器可以写入与小端机器相同的字节序列,它只是可能使用更多指令来完成此操作,因为它必须重新排序字节。对于写入大端格式的小端机器也是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)