关于文本文件与二进制文件以及文本流与二进制流(终结版)

1)文本文件与二进制文件的介绍
所谓文本文件就是在文件中存储的都是字符,,比如一个字符串123在文本文件中存储的都是其ASCII的形式,也就是每个字符的ASCII的形式:
31 32 33 在比如一个整型数据123在文本文件中存储的也是:31 32 33 也就是每个字符的ASCII的形式;所谓二进制文件的存储形式是二进制,对于一个字符串123在二进制文件中的存储形式是将其ASCII码转换为二进制的形式:其ASCII是31 32 33然后将该ASCII码转换为二进制,也就是:00011111 00100000 00100001 的形式。而对于一个整型数据123在二进制文件中的存储的是123的二进制形式:00000000 00000000 00000000 01111011。

这个只是我们从文件的形式上这样去理解,但是在计算机的内存存储的都是二进制形式,我们之所以能够看见文本文件中的内容是因为文本文件采用的是ASCII解码形式,而二进制文件采用的则是二进制的解码形式!因此有时候当我们用一个记事本打开一个二进制文件的时候会看见很多我们不希望看见的东西,那就是乱码!(它们采用的解码形式不一样)

通过上面简短的介绍我们可以字读二进制文件要比文本文件节约空间,这是因为文本文件存储的就是单个的字符,比如对于一个整型数据2147483647,在文本文件中要占据10个字节的内存空间,而在二进制文件中占据的只是4个字节的内存空间,也就是整型数据的长度!


这个流在计算机中分为了两种,一种叫文本流,另一种叫二进制流,在这里有一点必须要说明白,不要误认为文本文件就必须要以文本流的方式打开,而二进制文件就必须要以二进制流的方式打开,这个理解是大错特错的!!所谓的文本文件与二进制文件只是采用的解码方式与存储方式不一样,任何一个文件都可以采用文本流与二进制流的方式打开!这一点一定要搞清楚了!



文本流与二进制流有一个很重要的区别。

测试代码如下:

#include "stdafx.h"
#include <stdio.h> 
#include <direct.h>
int _tmain(int argc, _TCHAR* argv[])
{   
	char lacFileName[512]={0};
	memset(lacFileName,0,sizeof(lacFileName));
	FILE *pTxtFile = NULL;

	if (getcwd(lacFileName, 512) != NULL)
	{   
	
		strcat(lacFileName,"\\二进制写文本写差异.txt");
		pTxtFile = fopen(lacFileName,"w+b");
		int data = 0x0A;
		fwrite((char*)&data,1,sizeof(int),pTxtFile);
		fclose(pTxtFile);
	}
	return 0;
}

 测试结果如下:

  首先,Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换行>”,即“ \r\n”;Mac系统里,每行结尾是“<回车>”。因此在文件读写时,如果文件打开的方式为文本方式 向文件中写数值 0x0A 时,在存储时windows系统会将其识别为回车键,并自动写入0x0D(\r:换行键)。如果以二进制方式打开那么只会写入0x0A。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会 变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号

同时一个文件以文本流的方式打开,那么文件中连续存储的0D 0A组合会被转换为一个字符0A ,也就是一个换行符!!如果一个文件以二进制流的方式打开的话则不会出现上述的那种情况,而是一个字符一个字符的读取,也就是说有多少个字符我就读多少一个字符,我才不管连续存储的0D 0A组合要转换为一个字符0A。遇到了这个组合就直接读取0D 0A 。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值