二进制文件与文本文件

1、C语言中缺省是按照文本方式打开文件。

2、二进制文件和文本文件

(1)文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。

(2)文件通常分为二进制文件和文本文件。

(3)二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。

(4)文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。

3、文本方式和二进制方式

(1)按照文本方式(缺省情况下)往文件中写入数据时,一旦遇到换行字符(ASCII为10),则会转换为回车-换行(ASCII为13、10)。多写入了一个字符!在读取文件时,一旦遇到回车-换行的组合(即连续的ASCII 13、10),则会转换为换行字符(ASCII为10)。

(2)当我们按照二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出到文件中。

(3)在写入和读取文件时要保持一致。如果采用文本方式写入,应采用文本方式读取;如果采用二进制方式写入数据,在读取时也应采用二进制方式。

(4)不管是文本文件还是二进制文件,如果统一采用二进制方式进行写入和读取,则是不会出错的。

(5)不管是文本文件还是二进制文件,都可以采用二进制方式或者文本方式打开,然后进行写入或者读取。但是,对于二进制文件来说,如果以文本方式读取时,可能会出现一些问题。

4、问题产生:给你一个整数,例如:98341,将这个整数保存到文件中,要求在以记事本程序打开该文件时,也显示98341。

如果直接将98341写入文本文件中,然后再打开这个文件肯定看不到这个整数。因为对于文本文件来说,它的每一个字节存放都是可表示为一个字符得ASCII码。如果想在记事本中看到98341这个样子,实际上是得在记事本中看到“这几个字符相应的ASCII码转换后的字符”,也就是说,在记事本中看到的“98341”是五个字符,并不是整数:98341!

文件实际上就是数据内存中的存储形式在外部存储介质上的另一种存放形式。当以记事本打开上述文件,也就是以文本方式打开该文件时,该文件中存储的每一个字节的数据都要作为ASCII码进而转换为相应的字符,但是上述文件中的每一个字节的数据转换为字符之后又是不可读的,因此看到的就是乱码。

直接int i=98341;fwrite(&i,4,1,file);这样只会输出乱码。

解决办法:

(1):

FILE *file;
file=fopen("1.txt","w");
char *p="98341";
fwrite(p,1,5,file);
fclose(file);

或者(2)

FILE *file;
file=fopen("1.txt","w");
char ch[5];
ch[0]='9';
ch[1]='8';
ch[2]='3';
ch[3]='4';
ch[4]='1';
fwrite(ch,1,5,file);
fclose(file);

或者(3):我们在存储时去存储“98341”这五个字符的ASCII码(字符“0”的ASCII码是48)。

FILE *pFile=fopen("3.txt","w");
int i=98341;
char ch[5];
ch[0]=9+48;
ch[1]=8+48;
ch[2]=3+48;
ch[3]=4+48;
ch[4]=1+48;
fwrite(ch,1,5,pFile);
fclose(pFile);

或者(4)利用itoa()函数将证书转换为字符串,然后将这个字符串写入文件。但是这种方法值涉及数字的保存,如果把数字和字符夹杂在一起,并要求以记事本打开时能看到数字,就不用itoa函数,就要将这些整数数字转换为ASCII码,然后在下写入文件。

FILE *pFile=fopen("3.txt","w");
int i=98341;
char ch[5];
itoa(i,ch,10);
fwrite(ch,1,5,pFile);
fclose(pFile);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 00:26:46

二进制文件与文本文件的相关文章

二进制文件与文本文件的差异

1. 文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的.这两者只是在编码层次上有差异. 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等.二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码). 从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8),基于字符嘛,每个字符在具体编码中是固定的,ASCII码

C语言中二进制文件和文本文件的区别

所有的信息在内存中都是以二进制的形式进行存储的,这说明了二进制文件和文本文件不是在硬件上进行区分的. 二进制和文本文件因为操作系统的不同而不同,毕竟不同的人实现同一问题的思路也不是完全一样的嘛,首先说一下比较简单的那个:在Linux环境中,二进制文件和文本文件不进行区分.也就是说这两种方式在Linux操作系统下的实现机制是一样的:在OS X下面,太高大上了,用不到,所以也不关心:在Windows下面,二进制和文本文件是有区别的,下面就主要说明一下两者在Windows环境下的区别以及对应的文件操作

C++输出二进制文件和文本文件

所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值.能引起不同的是数字和一些排版用符号的格式. 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量,并按照ASCII码表转换为新的数字再存储: 排版符号的一个例子是换行符,二进制文件只是一个换行符,文本文件中则是换行符加上回车符: 所以简单的区分方法是文本文件对每个字符都要做ASCII转换,而二进制文件只会对字母做必要的ASCII转换,对数字则是直接存储的. 下来我们来讨论如何真正的实现二进制文件

二进制文件文本文件和二进制数据

我们知道计算机是用二进制来做运算处理的,所以所有存储在计算机里面的东西都是二进制的. 我也知道这句话,但为什么总是听到别人说"二进制"文件和"文本"文件呢? 按照上面那句话来说计算机里面的都应该是二进制的啊! 底层存储的都是二进制的"数据",而不是二进制的文件. 列举一个二进制文件如下: 00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54 0000

文本文件与二进制文件区别

计算机数据的存储在物理上都是二进制的,所以文本文件和二进制文件的区别并不是在于物理存储上. 主要在于编码方式上,文本文件是基于字符编码的文件常见编码有ascii,unicode,utf-8等,而二进制是基于值编码的文件 文本文件的定长编码(当前也有非定长如utf-8),二进制文件是边长编码,多少个bit代表一个值完全由你来决定,这样的编码方式导致二进制会更节省空间 如:00000000_00000000_00000000_00000001  用ascii编码方式在记事本中显示则为 NULL_NU

网络传输-文本文件和二进制文件的区别

1. 文本文件和二进制文件的定义 # 计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的.而从文件的编码方式来看,文件可以分为文本文件和二进制文件.文本文件是基于字符编码的文件,常见的有ASCII.Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值. # 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种. # (1)ASCII文件也称为文本文件,这种文件在磁盘中存放时

lua拷贝二进制文件的方法

使用lua拷贝二进制文件相比文本文件复杂一点,方法如下 function copyFunc(targetPath,sourcePath) local rf = io.open(sourcePath,"rb") --使用“rb”打开二进制文件,如果是“r”的话,是使用文本方式打开,遇到‘0’时会结束读取  local len = rf:seek("end")  --获取文件长度 rf:seek("set",0)--重新设置文件索引为0的位置 loc

用 C# 读取二进制文件

当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处理这些问题方面,它们比文本文件显得更有效率些. 在 C 和 C++ 中,读取二进制文件还是很容易的.除了一些开始符(carriage return)和结束符(line feed)的问题,每一个读到C/C++中的文件都是二进制文件.事实上,C/C++ 只知道二进制文件,以及如何让二进制文件像文本文件一

C#读取二进制文件方法分析

本文较为详细的分析了C#读取二进制文件方法.分享给大家供大家参考.具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处理这些问题方面,它们比文本文件显得更有效率些. 在 C 和 C++ 中,读取二进制文件还是很容易的.除了一些开始符(carriage return)和结束符(line feed)的问题,每一个读到C/C++中的文件都是