关于c++存储的疑问

doubleH 2011-05-25 12:05:54
下面是我的代码,代码内容是新建并以二进制打开d盘下的a.txt文件,向该文件写入一个double型的5.6数值,关闭文件。再以二进制读的方式打开文件,从文件读出三个字节并显示,显示结果为“5.6”。问题:double型应该是占8个字节,为什么我读三个字节就把该值显示出来了??
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
string fileName("D:\\a.txt");
ofstream fout(fileName.c_str(), ios::binary);
if(!fout)
{
cout<<"Can't open this file"<<endl;
return 0;
}
double a = 5.6;
fout<<a;
fout.close();
ifstream fin(fileName.c_str(), ios::binary);
char cha[4];
cha[3] = 0;
fin.read(cha ,3);
cout<<cha<<endl;
fin.close();
return 0;
}
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-05-25
  • 打赏
  • 举报
回复
改成double a = 5.634343;你的结果还对吗,不是说占用8个字节,你就必须读取8个字节,你的3个字节恰恰够用了
downmooner 2011-05-25
  • 打赏
  • 举报
回复
我用2进制打开都是用write函数和read 读出。。
qq120848369 2011-05-25
  • 打赏
  • 举报
回复
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
fstream ostrm("d:\\test.txt",ios::binary|ios::trunc|ios::in|ios::out);

double a=3.5,b;
ostrm.write((const char *)&a,sizeof(a));

ostrm.seekg(0);
char buffer[8]={0};
ostrm.read(buffer,8);

cout<<*(double*)buffer<<endl;

return 0;
}


这个脑子饶明白就行了.
doubleH 2011-05-25
  • 打赏
  • 举报
回复
哦,那请问二进制文件和文本文件哪里有不同?是写进内存的方式吗?一个是以字符形式,一个直接是数据的二进制形式,而且读出方式也不同?也就是说二进制文件占用的空间少,而文本读出的方式不需要计算吧,但是我们双击打开文件的形式应该是以该文件的写进方式是一样的,所以才会显示正确的内容……是吗
ryfdizuo 2011-05-25
  • 打赏
  • 举报
回复
写的时候必须二进制:
fin.read(cha ,3); 和fout.write对应。
luciferisnotsatan 2011-05-25
  • 打赏
  • 举报
回复
fout<<a;
这里,把double型的a的数值,转换成了对应的字符串。这个和用cout输出double一样。输出的是表示出的数值,而不是实际内存里的东西。
luciferisnotsatan 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

改成double a = 5.634343;你的结果还对吗,不是说占用8个字节,你就必须读取8个字节,你的3个字节恰恰够用了
[/Quote]
lz写进去的就是5.6这3个字符,换成5.634343也一样。写进去的是一个字符串,而不是double的实际内存里的值

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧