Say*_*Pal 2 c++ endianness file-handling
最近我(再次)读到了关于'endian'ness的内容.我知道如何识别主持人的字节顺序,因为SO上有很多帖子,而且我也看过这个,我认为这是非常好的资源.
但是,我想知道的一件事是如何检测输入二进制文件的字节顺序.例如,我正在读取二进制文件(使用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++;
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何检测字节序mydata.raw
,以及字节顺序是否影响该程序.
附加信息:
myDataMat
使用数学运算中操作数据,并且没有对数据执行指针操作或按位操作).通常不可能"检测"数据的字节顺序.就像不可能检测数据是4字节整数的数组,还是2字节整数的两倍.在没有任何关于表示的知识的情况下,原始数据只是大量无意义的位.
但是,通过一些关于数据表示的额外知识,它变得可能.一些例子:
33'554'432
度,还是2
?您可以选择代表合理数据的字节顺序.当然,当外星人入侵并开始融化我们的星球时,这种猜测就会失败. 归档时间: |
|
查看次数: |
2553 次 |
最近记录: |