免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3460 | 回复: 7
打印 上一主题 下一主题

fread和fwrite [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-03 16:02 |只看该作者 |倒序浏览
是不是这两个函数不管文件以何种方式打开输出的都是二进制流?为什么以下两个程序输出无差别?

#include <stdio.h>
#include <stdlib.h>
/*本程序测试字节输出顺序,结果为先输出低位字节,后输出高位字节*/


void main()
{
  unsigned int a=25185;/*a=98*256+97*/
  FILE* fp;
  fp=fopen("a.txt","wb+");        //这改为“wt+"竟结果不变?
  if(fp==0){puts("error");exit(0);}
  fwrite(&a,sizeof(unsigned int),1,fp);
  fwrite(&a,sizeof(unsigned int),1,stdout);
  //stdout本来是二进制设备,为什么输出仍是 ab 而不是 25185?

  putchar('\n');
  fclose(fp);
}
根据以上比较只能得出fwrite只输出二进制流,请大侠指点。

论坛徽章:
0
2 [报告]
发表于 2005-12-03 18:27 |只看该作者
所谓的文本方式、二进制方式,在计算机存储上讲,本质都是一样的,都是01.它们之间的区别只是对于换行的不同处理(可能还有别的,我了解到的只有这一点)。

fwrite只是忠实的输出你给它的数据。

在你的例子里,你给fwrite的是4个字节,fwrite就忠实地把这四个字节分别写到了文件、标准输出里。
至于你看到的,只不过是终端、记事本的显示方式而已。如果愿意,你可以用16进制去看它们。

论坛徽章:
0
3 [报告]
发表于 2005-12-03 20:05 |只看该作者
(25185)10=(6261)16
所以你写的时候就是写了61,62(字节序),也就是ab,你如果以2进制的形式读那还是25185
二进制和文本的区别应该不止是换行吧。好像还有eof的影响
二进制方式和文本方式最大的区别应该是数据的组织方式
二进制的方式你写整数1314,跟用文本方式写1314是不同的,1314用2进制写那只用两个字节(16位机上),文本方式则是4个字节(用的assic码),二进制方式需要精心的组织数据的位置/格式,文本方式则没那么要求严格而且方便编辑
说的不对的地方请指教

论坛徽章:
0
4 [报告]
发表于 2005-12-04 09:44 |只看该作者
原帖由 luojiannx 于 2005-12-3 20:05 发表
(25185)10=(6261)16
所以你写的时候就是写了61,62(字节序),也就是ab,你如果以2进制的形式读那还是25185
二进制和文本的区别应该不止是换行吧。好像还有eof的影响
二进制方式和文本方式最大的区别应该是 ...

楼主的程序里fwrite了四个字节,不是2个。

论坛徽章:
0
5 [报告]
发表于 2005-12-04 10:25 |只看该作者
不一定吧?如果在DOS下用TC的话就是两个字节
楼主对数制和存储的概念还是不清楚啊~~~

论坛徽章:
0
6 [报告]
发表于 2005-12-04 12:59 |只看该作者
呵呵,我已经明白了,多谢!如何用notepad以二进制方式查看文件?

论坛徽章:
0
7 [报告]
发表于 2005-12-06 18:26 |只看该作者
原帖由 beginer1 于 2005-12-4 12:59 发表
呵呵,我已经明白了,多谢!如何用notepad以二进制方式查看文件?


记事本可没有这个功能

你可以用ultraEdit 或者 vim的16进制方式察看

二进制方式写的内容的意思要看人家是怎么定义的,0x6162,你要用二进制方式解释那就是一个数字,文本方式就是ab

论坛徽章:
0
8 [报告]
发表于 2005-12-08 23:47 |只看该作者
这都是历史留给后人的麻烦啊.

如果当初.C为DOS\WINDOWS的描述语言.就不会这样啦吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP