读书人

读写浮点数二进制文件的有关问题(再次

发布时间: 2012-06-10 14:03:15 作者: rapoo

读写浮点数二进制文件的问题(再次迷惑)
fstream f1;
f1.open("t1.txt",ios::binary|ios::out|ios::in|ios::trunc);
float v,cai=0.0762; //cai=0x3d9c0ebf
char ch[5];ch[4]='\0';
f1.seekp(ios::beg);
strcpy(ch,(char*)&cai);
for(int i=0;i<4;i++)
{f1.write((char*)(&ch[3-i]),1); } //高端在前,低端在后,写浮点数进文件

f1.seekg(ios::beg);
f1.read((char*)&v,sizeof(v)); //读文件
f1.close();
cout<<v;


//(读出来的结果不是0.0762,这种读文件的方法错误在哪里?非得一个字节的读最后拼接一起吗?)

[解决办法]
你为什么要倒过来写入文件? 如果倒过来写,那你就要到过来读。

还有strcpy(ch,(char*)&cai);不是很安全,因为你不知道cai后面一个字节是不是0。该成strncpy(ch,(char*)&cai, 4);

[解决办法]
不建议使用strcpy或者strncpy,应该使用memcpy
[解决办法]
摒弃fstream、cout
使用FILE *、printf
[解决办法]
写一个浮点数要这么复杂??
直接写啊
f1.write((char*)&cai, sizeof(cai));
读的时候
f1.read((char*)&v, sizeof(v));
反正用什么格式写的,就用什么格式读,这样才能保证数据的正确。
[解决办法]

探讨

写文件是没错的 文件里就是3D 9C 0E BF,如果按照正常顺序写,就会反过来的;我这样写不就是可以直接读了,但是读 我实在找不着错误在哪里??? 为什么这么读不对!!!!

[解决办法]
对电脑而言只有二进制字节,对人脑才有浮点数。

读书人网 >C++

热点推荐