我做了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