文本流与二进制流的区别

最近在复习c语言的文件处理函数,更大的层面来说这都是IO问题,所以复习一下IO相关的知识。

而文本流与二进制流的概念我看了这篇文章,觉得讲地很好,它的说法和《C和指针》里面的是一样的。

先说下两个重要的概念,我们键盘上的enter键也就是回车键,在按下的时候实际上可以分解为两个动作。

(1)将光标位置移动到最开始:/r,即老式打字机意义上的回车。

(2)讲光标移动到下一行:/n,即换行。

文章转载自:http://blog.sina.com.cn/s/blog_60d705b10100efnp.html


大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。
简单来说,

  • 文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。
  • 二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。
从上面可以看出文本文件基本上是定长编码的,基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。
而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。

C的文本读写和二进制读写
 
    应该说C的文本读写与二进制的读写是一个编程层次上的问题,与具体的操作系统有关,所以"用文本方式读写的文件一定是文本文件,用二进制读写的文件一定是二进制文件"这类观点是错误的.下面的讲述非明确指出操作系统类型,都暗指windows.
      C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.
文本方式写时,每遇到一个''\n''(0AH换行符),它将其换成''\r\n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''\r\n''将其反变化为''\n'',然后送到读缓冲区.
二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件.


对于内容为 “Ab123\r\n" (41 62 31 32 33 0D 0A)的文件,
pf1 = fopen("f:\\1.txt","r");或者pf1 = fopen("f:\\1.txt","rb");
for(int i=0;i <6;i++){
    fread(&a[i],1,1,pf1);
    printf("%0X ",a[i]);
}
fclose(pf1);//关闭文件

的结果分别为:
41 62 31 32 330A                  和        41 62 31 32 33 0D 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值