最近我(再次)讀到'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
,並沒有指針操作或按位運算對數據進行)。 - 我的機器(主機)是小端。
你不能*檢測二進制文件的字節順序。在將數據寫入文件和使用'ntohs'等時,只需使用'htons'等 –
簡而言之:您不能。 –
*我想知道如何檢測字節序列... *您無法檢測*它。文件本身包含一些它所使用的排列順序的指示,或者你運氣不佳。如果你讀了'0x2a00',你不能確定它是'42'(小端)還是'10752'(大端)。 –