我做了comp.lang.C++後,得到了這個字節交換和C++/C
但仍然沒有答案。
我對二進制讀取操作有點困惑。
我想讀取流功能的二進制文件。這是一個商業程序(ANSYS)的結果文件,我知道文件的結構,至少從手冊中知道。
該文件結構爲記錄,程序是用fortran編寫的。所以該結構是像
記錄長度(INT) 虛設整數 數據(可能是int,雙) 虛設整數
第一個記錄是一個100整數塊,其中,這對應於數據在上述表示。
如果我開始閱讀文件和讀取的第一個值,它是記錄長度(整數),我有交換字節來獲得100
正確的價值我不明白爲什麼我有交換字節,因爲這個文件是在同一臺機器上生成的,並且它們應該使用相同的系統特定例程,所以這應該不是問題,但似乎並非如此。還有其他事情正在發生。我無法理解這一點。軟件可以強制交換我很難理解原因的字節嗎?
任何意見表示讚賞。
這是一個天真的測試用例
int main() {
ifstream myfile;
char intBuffer[4];
myfile.open ("truss.rst", ios::binary);
myfile.read(intBuffer, sizeof(int));
//cout << *((int*)intBuffer) << endl;
// if I do not use this portion-
// I do not get what I want
char *cptr, tmp;
tmp = intBuffer[0];
intBuffer[0] = intBuffer[3];
intBuffer[3] = tmp;
tmp = intBuffer[1];
intBuffer[1] = intBuffer[2];
intBuffer[2] = tmp;
// -----------------------------
cout << *((int*)intBuffer) << endl;
myfile.close();
return 0;
}
最佳, U.
你在c.l.C++上收到的答案有什麼問題?對我來說似乎很好。 – 2010-11-30 08:56:25
你是否按照說明和搜索「endian」(並閱讀它)?維基百科有詳細解釋。 – 2010-11-30 08:59:23
有趣的是,你可以在函數體的第4行使用sizeof(int),但是在其他地方將其硬編碼爲4 ... 你也聲明瞭cptr,然後從不使用它。 如果你想知道爲什麼文件不是以「本機」格式寫的,你看過寫入文件的例程嗎? – CashCow 2012-11-12 09:45:36