字节顺序会导致读取或写入操作冲突吗?

时间:2019-12-05 18:14:25

标签: c++

就我而言,字节序仅影响字节,但我仍然不知道它是否影响单个位。

我知道网络字节顺序。但是,我不确定输入或文件I / O是否有标准。更具体地说,类似于NES ROM仿真器/解码器。 假设NES本质上是小的字节序,将所有位翻转,然后在大型字节序机器上使用NES模拟器的程序员不会意识到需要反转这些位才能继续。

如果有读取文件静态数据的标准,那当然不是问题。

如果小端机器将数据写入文件。凭直觉,我不禁假定这些位将被反向存储。 (我确定可以保证字节顺序相反)

因此,如果一台小的字节序机器将数据写入一个ROM文件,这是否意味着必须翻转所有位,以便大型字节序机器读取它?

2 个答案:

答案 0 :(得分:2)

字节序大约是一个字节中 bytes 的顺序。

您在一个系统上的位:

 byte 1   byte 2   byte 3
ABCDEFGH IJKLMNOP QRSTUVWX

在具有相反字节序的系统上看起来会像这样(中间字节序也存在,但让我们暂时忽略它),直到您对其进行纠正:

 byte 1   byte 2   byte 3
QRSTUVWX IJKLMNOP ABCDEFGH

因此,字节的读取顺序不同,但是每个字节的值都没有改变。

但是,如果整数以一种方式(例如,补码)表示在一个平台上,而另一种方式(例如,补码)表示在另一个平台上,则组成整数的位将无法在这些平台之间移植即使您考虑了字节序差异。您必须自己解决这个问题。

答案 1 :(得分:0)

如果我的理解正确,您是在问是否存在从另一台计算机传输的文件的每个字节中的位都可能反转(10110000-> 00001101)的问题,如果不是,为什么?

文件被定义为由字节组成(这是由人们组成的定义)。每当您复制文件时,副本就具有与原始字节相同的字节。如果这没有发生,那么我们打电话给编写复制程序的人,并称他们为白痴。编写复制程序的人不想被称为morons,因此要确保其复制程序正确复制字节。

在两个不同系统之间传输文件时也是如此。设计网络的人也不想被称为morons,因此他们确保网络两端的计算机都知道字节的哪一端是高端,哪一端是低端。以太网以小尾数顺序发送位,但这没关系,因为您实际上从未以任何顺序看到位-您只能看到整个字节。

如果您使用软盘(还记得吗?),设计软盘的人也不想被称为morons,因此他们确保所有使用软盘的计算机都将这些位放在同一位每个字节内的顺序...看到模式了吗?

当某人设计出转储NES ROM的电路时,他们会做同样的事情。他们确保如果NES看到一个字节为10110000,那么计算机也是如此。 NES的电路板左侧是否有MSB,计算机的电路板右侧是否有MSB无关紧要-这只意味着设计人员必须交换电线(或记下笔记)供软件编写者使用)。如果那没有发生,则将NES转储器电路声明为 broken 。然后,制造电路的人会打电话给自己,并称自己为要弄坏电路的笨蛋,然后他们将其修复。

可能他们故意以错误的顺序转储位,以简化电路,但我们仍然称其为错误,并且我们知道该软件必须在将ROM数据保存到硬盘之前对其进行修复。