奇怪的fwrite问题 float f = (float)30.711933; int len = fwrite(&f,sizeof(float),1,fp); // 写层的数量 本打算,往文件里写4个字节,因为float是4个自己的。但实际调试发现是以上代码实际写了5个字节到文件里,为什么?怎么才能只让写4个字节呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你怎么判断它写了5个字节?你看的是文件的字节数吗?如果是,应该是文件有一个标志位占用了一个字节吧int len = fwrite(&f,sizeof(float),1,fp); len表示写入的字节,这里肯定会是4你调试的时候len是5而不是4? 你文件的打开方式可能有问题fopen(..,"wb"); FILE *fp; fp = fopen("c:\\test.bin","wt"); if(!fp) return; float f = (float)30.711933; int len = fwrite(&f,sizeof(float),1,fp); // 写层的数量 long l = ftell(fp); fclose(fp);以上代码运行结果为:len = 1, l = 5 打开"c:\test.bin" 内容为5个字节0D 0A B2 F5 51 等5字节。此结果预计写4个细节的float 数据不符合。 注意: 我修改以上代码中的 (float)30.711933; 为(float)30.707109;仅仅数组变化:得到了不同的结果: FILE *fp; fp = fopen("c:\\test.bin","wt"); if(!fp) return; float f = (float)30.707109; int len = fwrite(&f,sizeof(float),1,fp); // 写层的数量 long l = ftell(fp); fclose(fp);结果:len = 1 , l = 4; 打开“c:\test.bin” 内容为29 58 F5 41 等4字节内容。 fopen("c:\\test.bin","wt");"wt"->"wb",应该是没问题了。另外说实话,我写文件只用过"w"和"wb",前者好像是文本方式,后者是二进制方式,"wt"是个什么东东,完全不知道@_@! [散分]要最后一跳了,骑驴找马的日子有点艰苦啊。 推荐xp下,能在命令行使用的fat16转fat32的无损转换程序.谢谢 请帮忙看看,socket包装类的问题。 求助:VC与DAO连接问题 处理DragDrop时遇到的奇怪问题:EnumFormatEtc调用失败 请问:BSTR 如何转换成 char* 求救,关于UDP的接收问题 怎样修改单文档程序的标题。 求救,如何判断当前系统是windowsXP? 请问在MFC中怎样画标尺 急!!!____如何对LOD算法生成的三维地形进行实时渲染 如何在WinCE中枚举某个Dialog里面的所有Button?
int len = fwrite(&f,sizeof(float),1,fp);
len表示写入的字节,这里肯定会是4
你调试的时候len是5而不是4?
fopen(..,"wb");
fp = fopen("c:\\test.bin","wt");
if(!fp) return; float f = (float)30.711933;
int len = fwrite(&f,sizeof(float),1,fp); // 写层的数量
long l = ftell(fp);
fclose(fp);
以上代码运行结果为:
len = 1, l = 5 打开"c:\test.bin" 内容为5个字节0D 0A B2 F5 51 等5字节。
此结果预计写4个细节的float 数据不符合。
仅仅数组变化:
得到了不同的结果:
FILE *fp;
fp = fopen("c:\\test.bin","wt");
if(!fp) return; float f = (float)30.707109;
int len = fwrite(&f,sizeof(float),1,fp); // 写层的数量
long l = ftell(fp);
fclose(fp);
结果:len = 1 , l = 4; 打开“c:\test.bin” 内容为29 58 F5 41 等4字节内容。
另外说实话,我写文件只用过"w"和"wb",前者好像是文本方式,后者是二进制方式,"wt"是个什么东东,完全不知道@_@!