fwrite()与fprintf()是不同的。

fwrite将写入的数据作为文件的磁盘内容保存。fprintf将写入的数据的每个字符所对应的ASCII码作为文件的磁盘内容保存。fprintf做了一个转换的工作。

当打开文件时,记事本会自动把文件的磁盘内容作为ASCII码转换成对应的字符,然后再显示出来,即显示的是文本内容而不是磁盘内容。

例如,用fwrite向文件写入“65”时,文件的磁盘内容就是保存的65(磁盘上以二进制表示)。当用记事本打开文件时,记事本会读到65,并把65看作一个ASCII码,再把对应的字符“A”显示出来。因此屏幕上看到的文本内容是“A”。 而用fprintf向文件写入“65”时,文件的磁盘内容保存的是“6”和“5”这两个字符对应的ASCII码,分别是54和53。因此文件的磁盘内容是54和53。当用记事本打开文件时,记事本读到54,就显示出对应的“6”。再读到53,就显示出对应的“5”。 代码示例。

#include

#include

void test()

{

FILE *foutput = fopen("output", "w");

int A = 65;

char buffer[10000];

int i = 0;

int l;

/* Write data to file */

fwrite(&A, sizeof(A), 1, foutput);

fprintf(foutput, "%d", A);

fclose(foutput);

/* Read data from file */

foutput = fopen("output", "r");

while (fread(buffer + i, sizeof(char), 1, foutput)) {

++i;

}

l = i;

/* Print data on screen */

for (i = 0; i < l; ++i) {

printf("buffer[%d] = %d\n", i, (int)buffer[i]);

}

printf("l = %d\n", l);

fclose(foutput);

}

int main()

{

test();

return 0;

}

输出结果:

buffer[0] = 65

buffer[1] = 0

buffer[2] = 0

buffer[3] = 0

buffer[4] = 54

buffer[5] = 53

l = 6

打开“output”文件的显示结果:

同样的,fread()与fscanf()也有类似的区别。

fread将文件的磁盘内容直接读入。fscanf将文件的磁盘内容作为ASCII码转换成对应的字符,然后再读入,即读入的是文本内容而不是磁盘内容。

可以想象,如果用fscanf读取上面例子中的文件,每次读取一个字节。那么buffer中前6个字符保存的将是“A[NULL][NULL][NULL]65”。

另外,感觉C语言中的fopen()的打开模式“b”没有作用。例如是写“w”还是“wb”对fwritet和fprintf都没有影响。以前不明白二进制文件是怎么回事,原来是fprintf和fscanf做了一次转换。

c语言一个一个读取文件字节,C语言中二进制文件的读取相关推荐

  1. java读取文件buffered_关于Java中使用BufferedReader读取文件的疑惑

    我记得很久以前写过一个内部使用Byte数组的BufferedStreamReader,实测效率比原本使用Char数组的要快,不过这只是在32位系统下测试的.写这个StreamReader是为了修正文件 ...

  2. python逐个读取文件_在Python中多次读取同一文件

    我需要下载文本文件的zip存档,将存档中的每个文本文件分发给其他处理程序进行处理,最后将解压缩的文本文件写入磁盘. 我有以下代码.它在同一个文件上使用多个打开/关闭,这看起来并不优雅.如何让它更优雅高 ...

  3. c语言读取文件函数,C语言文件操作详细分析:读取文件(fread函数使用)

    C语言文件操作详细分析:读取文件(fread函数使用) 这里详细介绍了C语言读取文件的函数fread的使用说明,参照了MSDN的说明,同时加入自己的经验让大家学的更加明白. C语言读取文件函数frea ...

  4. java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

    java使用缓冲区读取文件 最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 . 在此版本中,显然存在与Java 7 , ...

  5. 单片机c语言怎样添加自定义头文件,单片机C语言编程与或|头文件常见问题

    一.常见问题 1.头文件reg51.h和reg52.h其实是一样的,大家两个都可以用. 2.main()前面的void可加可不加,反正都是无返回值函数. 3.不是每一个程序都要用到死循环while(1 ...

  6. c语言0x1234占两个字节,C语言考试必考知识点

    <C语言考试必考知识点>由会员分享,可在线阅读,更多相关<C语言考试必考知识点(11页珍藏版)>请在人人文库网上搜索. 1.C 语言考试知识点第一章 C 语言基本知识[考点1] ...

  7. c语言实现自动打开文件夹,c语言打开文件(c语言文件打开方式代码)

    1.2 文件的输入输出函数 键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成.而在编程时使用最多的要算 是磁盘文件, 因此. { printf("File ope ...

  8. java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式

    java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...

  9. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

最新文章

  1. java学习--抽象类与接口
  2. SQL Server的WAITFOR DELAY注入
  3. win10+VS2015+pycaffe编译
  4. tcp/ip 建立过程
  5. 机器学习知识点(三十四)机器学习类学习资源
  6. 可折叠Web可能会给我们带来的变化
  7. php中如何固定表格宽度,实例讲解DataTables固定表格宽度(设置横向滚动条)
  8. dfa转正则表达式_GitHub - hidva/re2dot: 根据正则表达式生成其对应 DFA 的状态转移图...
  9. NativeXml (2):对象建立
  10. 如果一个人不喜欢争,不喜欢计较,只知道退让,是不是真的傻?
  11. EasyUI 添加一行的时候 行号出现负数的解决方案
  12. Web API-DOM事件高级
  13. java 不让滚动条随着拖拽滑动_「最近项目小结」使用Vue实现一个简单的鼠标拖拽滚动效果插件...
  14. Atitit 软件项目的一整套解决方案(gui界面,中间,存储数据库,图像处理,全文搜索)attilax总结
  15. 苹果carplay下载_苹果宣布推出CarPlay
  16. 利用dlib和opencv建立人脸识别数据集并进行人脸识别
  17. 仿今日头条视频播放JieCaoVideoPlayer
  18. c语言读取midi文件举例子,c# – 使用NAudio从MIDI文件中读取音符
  19. Matlab 打不开 无法运行 win10 系统 卡在启动界面没有反应 语言bug
  20. go timer和ticker使用方式

热门文章

  1. Data for set COM_LOCAT_ADDR may only be changed in the original system CRQ_100
  2. Java注解实现之how to use path variable @PathVariable
  3. SAP OData实现错误消息:OPPORTUNITIES_GET_ENTITY not implemented in data provider class
  4. 通过 SAP Spartacus 的 Component 映射机制,更改默认购物车 Cart 页面
  5. CRM Set Type com_commercial的UI界面
  6. 用代码判断当前系统是否支持某个版本的feature
  7. imp oracle reschema_Oracle EXP和IMP用法和介绍
  8. jmeter(二)录制脚本
  9. java轻功游戏,会轻功又可以飞的游戏(3d大型游戏)
  10. mac 用惠普扫描仪扫描提示将对您的电脑造成伤害_惠普全能打印神器测评:15秒智能闪充、打一张仅需5分钱...