ASCII与二进制在内存中的存储区别(EOF的应用)

一、文本文件与二进制文件的定义

    大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思

    从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。

 二、文本文件与二进制文件的存取   

(1)文本文件的存取

        文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流,然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式,ASCII码的一个字符是8个比特,它以8个比特为一个单位来解释这个文件流。

        比如文本文件中存放的的5678,当我们创建这个文件时,是以文本文件方式创建,已经注定我们存放5678时,是以字符方式存放,本质上他还是以二进制方式存放在内存,但是逻辑解析不用,文本文件会以字符的形式将“5678”以二进制方式逐个存放在内存,所以这里的“5”不是数字,而是字符'5',所以“5678”转换为ASCII码值为4

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`fopen("","wb")`的含义是打开一个二进制文件并以写入方式打开。其,空字符串""表示文件名为空,如果文件不存在,则会创建一个新的空文件。"wb"表示以二进制方式写入文件。如果文件已经存在,那么会清空文件的内容重新写入。如果文件不存在,那么会创建一个新的文件并写入相应的内容。 判断一个文件是否是二进制文件可以通过检查文件是否有非ASCII码字符来判断。ASCII码字符的范围是0~127,而非ASCII码字符的范围是128~255。如果文件存在非ASCII码字符,则可以认为这是一个二进制文件。可以用以下代码来实现: ```c #include <stdio.h> int is_binary_file(FILE *fp) { int c; while ((c = fgetc(fp)) != EOF) { if (c < 0 || c > 127) { return 1; } } return 0; } int main() { FILE *fp = fopen("test.txt", "rb"); if (fp == NULL) { printf("Can't open the file.\n"); return 0; } if (is_binary_file(fp)) { printf("The file is a binary file.\n"); } else { printf("The file is not a binary file.\n"); } fclose(fp); return 0; } ``` 在上面的代码,`is_binary_file()`函数用来判断一个文件是否是二进制文件。函数使用`fgetc()`函数逐个读取文件的字符,并判断其是否为非ASCII码字符。如果存在非ASCII码字符,则返回1,否则返回0。在`main()`函数,首先打开文件,然后调用`is_binary_file()`函数来判断文件是否是二进制文件,最后关闭文件。 需要注意的是,上面的方法只能判断文件是否为二进制文件,但不能判断文件是否为文本文件。因为文本文件和二进制文件的区别并不在于文件是否存在非ASCII码字符,而在于文件的编码方式,文本文件一般是以ASCII码或Unicode编码方式存储的,而二进制文件可以是任意编码方式存储的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值