题
这是不特定于任何编程语言的问题。假设你有写大端机上的某些文件,你知道这一点。如果两个单字节值写回到后端,你怎么会知道?大端逆转16,32的顺序,64个值,所以你怎么会知道你需要它读成单个字节?
例如,你写的字节0×11,则该字节为0x22。该文件将包含0x1122。如果你读了一小端机器上,你必须把它转换。这样,你把它读作2211,或1122?你知道怎么样?
这是否任何意义?我觉得我失去了一些东西基本超级这里。
解决方案
有没有办法知道。这就是为什么正式指定的文件格式一般授权字节排列顺序,或者他们提供了一个选项(如使用Unicode,如MSN提到)。这样,如果你正在阅读与特定格式的文件,你的知道的是大端不已,因为事实上,它在格式意味着特定字节序。
这一点的另一个很好的例子是网络字节顺序 - 网络协议通常大端,所以如果你是一个小端处理器聊到互联网,你必须向后写东西。如果你是大端,你不必担心。人们使用的功能,如 htonl再用ntohl和他们写的东西预处理网络使他们的源代码在所有机器上是相同的。这些功能被定义为做大端机器什么都没有,但他们在翻转little-endian的机器字节。
在键实现的是,端序是如何特别架构表示词语的性质。这并不是说他们写的文件的授权的某种方式;它只是告诉你,在体系结构上的指示期望多字节字有他们字节命令以某种方式。大端机可以写入相同的字节序列作为little-endian的机器,也许会使用一些更多的指令去做,因为它重新排列字节。这同样适用于小端机写大端格式。
其他提示
您需要或者神圣的,因为你知道别的东西(即你的了解您正在阅读大端格式的文件),或者你需要将文件中的字节顺序编码莫名其妙。 Unicode文本文件使用0xFFFE
(或类似的东西)为文本文件的前两个字节来计算字节顺序。如果你读它作为0xfffe,那么它在本地endian格式。如果你读它为0xFEFF,它不是。
您说得对......没有你要找的数据的一些想法,也没有办法知道的。
话虽这么说,经常有办法猜...如果你知道你应该会看到文本,如果可以的话,你可以运行一些简单的测试,看看有什么你得到合理...读头了,你可以经常神圣它从...但如果你只是在寻找一个字节流,有没有万无一失的办法的知道的。
这是否任何意义?
是:这是一个问题
我觉得我失去了一些东西基本超级这里。
基本上,读取文件(特别是一个二进制文件),则需要知道文件格式:它包括知道一对的字节是否是单个字节的序列,或者,是一个单双字节字。 p>
您没有缺少什么。明确定义的二进制文件格式(如Excel 97-2003 XLS工作簿例如)必须包括端序一>作为规范的一部分,或者你会明显有大问题。
从历史上看,苹果使用摩托罗拉的处理器,这是大端(68000和它的后继者),而IBM PC / DOS / Windows计算机一直使用英特尔处理器,其是小端。因此,与C / C ++代码库的软件供应商,其在两个平台上运行非常familar这个问题,而谁一直开发的Windows软件,或Mac软件苹果前软件vendores切换到英特尔,可能会简单地忽略了它 - 至少对于他们的自己的文件格式。
不知道这是否是你问什么,但是,例如,PCAP文件格式指定变量字节序:
http://www.winpcap.org/ntar/draft/PCAP -DumpFileFormat.html
的概念是,你可以写一个“标记”字节,如0×12345678,到文件的标题中。上的“大端”机器诸如PowerPC的,它将被写为如下:
0×12 0x34 0x56储存0x78
在一个“小字节序”机器如x86的,它将被写为如下:
0x78 0x56储存0x34 0×12
然后,阅读你的头的时候,你可以通过的您的机读什么,以确定是否需要转换字节读取文件时说。或者你可以指定一个字节序,如大端。然后,你将永远转换字节的小端机器上。
在PCAP格式的情况下,这是出于性能原因来完成。但是,它可能是简单的指定和字节顺序,并坚持下去。
在处理器中的一个或另一个端模式操作(有些可以切换基于页面,等等)。他们没有的知道的,如果他们正在做正确的事情与否。他们只是做他们做什么。 (垃圾,垃圾出): - )
有没有办法来检测我说。但在C#BitConverter具有IsLittleEndian-propertie。
这一切都取决于你想如何enterpret它。
更多 href="https://stackoverflow.com/questions/217980/c-little-endian-or-big-endian">。