我在comp.lang.c ++上做了一个帖子,得到了这个
但这仍然不是答案.
我对二进制读操作有点困惑.
我试图用流函数读取二进制文件.这是商业程序(ANSYS)的结果文件,我知道文件的结构,至少从手册中知道.
该文件的结构为记录,程序以fortran编写.所以结构就像
记录长度(int)虚拟整数数据(可以是int,double)虚拟整数
第一个记录是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;
}
Run Code Online (Sandbox Code Playgroud)
最好的,美国
这不仅取决于您正在使用的机器.如果Fortran基础结构以big endian而不是little endian写入整数,那么无论操作系统是什么,你都必须处理它.
我建议你使用ntohl()和ntohs()功能,这比你的交换程序更清晰.