这是不特定于任何编程语言的问题。假设你有写大端机上的某些文件,你知道这一点。如果两个单字节值写回到后端,你怎么会知道?大端逆转16,32的顺序,64个值,所以你怎么会知道你需要它读成单个字节?

例如,你写的字节0×11,则该字节为0x22。该文件将包含0x1122。如果你读了一小端机器上,你必须把它转换。这样,你把它读作2211,或1122?你知道怎么样?

这是否任何意义?我觉得我失去了一些东西基本超级这里。

有帮助吗?

解决方案

有没有办法知道。这就是为什么正式指定的文件格式一般授权字节排列顺序,或者他们提供了一个选项(如使用Unicode,如MSN提到)。这样,如果你正在阅读与特定格式的文件,你的知道的是大端不已,因为事实上,它在格式意味着特定字节序。

这一点的另一个很好的例子是网络字节顺序 - 网络协议通常大端,所以如果你是一个小端处理器聊到互联网,你必须向后写东西。如果你是大端,你不必担心。人们使用的功能,如 htonl再用ntohl和他们写的东西预处理网络使他们的源代码在所有机器上是相同的。这些功能被定义为做大端机器什么都没有,但他们在翻转little-endian的机器字节。

在键实现的是,端序是如何特别架构表示词语的性质。这并不是说他们写的文件的授权的某种方式;它只是告诉你,在体系结构上的指示期望多字节字有他们字节命令以某种方式。大端机可以写入相同的字节序列作为little-endian的机器,也许会使用一些更多的指令去做,因为它重新排列字节。这同样适用于小端机写大端格式。

其他提示

您需要或者神圣的,因为你知道别的东西(即你的了解您正在阅读大端格式的文件),或者你需要将文件中的字节顺序编码莫名其妙。 Unicode文本文件使用0xFFFE(或类似的东西)为文本文件的前两个字节来计算字节顺序。如果你读它作为0xfffe,那么它在本地endian格式。如果你读它为0xFEFF,它不是。

您说得对......没有你要找的数据的一些想法,也没有办法知道的。

话虽这么说,经常有办法猜...如果你知道你应该会看到文本,如果可以的话,你可以运行一些简单的测试,看看有什么你得到合理...读头了,你可以经常神圣它从...但如果你只是在寻找一个字节流,有没有万无一失的办法的知道的。

  

这是否任何意义?

是:这是一个问题

  

我觉得我失去了一些东西基本超级这里。

基本上,读取文件(特别是一个二进制文件),则需要知道文件格式:它包括知道一对的字节是否是单个字节的序列,或者,是一个单双字节字

不知道这是否是你问什么,但是,例如,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">。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top