最近我(再次)读到了关于'endian'ness的内容。我知道如何识别主持人的字节顺序,因为SO上有很多帖子,而且我也看过this,我认为这是非常好的资源。
但是,我想知道的一件事是如何检测输入二进制文件的字节顺序。例如,我正在阅读二进制文件(使用C++
),如下所示:
ifstream mydata("mydata.raw", ios::binary);
short value;
char buf[sizeof(short)];
int dataCount = 0;
short myDataMat[DATA_DIMENSION][DATA_DIMENSION];
while (mydata.read(reinterpret_cast<char*>(&buf), sizeof(buf)))
{
memcpy(&value, buf, sizeof(value));
myDataMat[dataCount / DATA_DIMENSION][dataCount%DATA_DIMENSION] = value;
dataCount++;
}
我想知道如何检测mydata.raw
中的字节序,以及字节顺序是否会影响此程序。
其他信息:
myDataMat
中的数据,并且没有对数据执行指针操作或按位操作)。 答案 0 :(得分:5)
一般来说,无法“检测”数据的字节顺序。就像不可能检测数据是4字节整数的数组,还是2字节整数的两倍。在没有任何关于表示的知识的情况下,原始数据只是一大堆无意义的数据。
然而,通过一些关于数据表示的额外知识,它变得可能。一些例子:
33'554'432
度,还是2
?您可以选择代表合理数据的字节顺序。当然,当外星人入侵并开始融化我们的星球时,这种猜测就会失败。答案 1 :(得分:3)
你无法说出来。
字节顺序变换本质上是数字x
上的运算符E(x),使得x = E(E(x))。所以你不知道&#34;哪个方向?#34; x
元素位于您的文件中。