读写浮点数二进制文件的问题(再次迷惑)
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));
反正用什么格式写的,就用什么格式读,这样才能保证数据的正确。
[解决办法]
[解决办法]
对电脑而言只有二进制字节,对人脑才有浮点数。