`
老顽童
  • 浏览: 48172 次
  • 性别: Icon_minigender_1
  • 来自: 默认
社区版块
存档分类
最新评论

文本文件与二进制文件,C++流(待续)

阅读更多

首先,让我们来回顾下你通常认为不值得一提的ASCII码表

ASCII码一般分为三个部分:

  1. Non printable, system codes between 0 and 31.
  2. Lower ASCII(Standart ASCII) , between 32 and 127. This part of the table (as shown below) originates from older, American systems, which worked on 7-bit character tables. Foreign letters, like and were not available then.
  3. Higher ASCII(Extended ASCII) , between 128 and 255. This part is programmable, in that you can exchange characters based on language you want to write in. Foreign letters are placed in this part and an example is shown below.

ascii[2][1]

ASCII 碼大致可以分作三部分 組成。

第一部分 由 00H 到 1FH 共 32 個,一般用來通訊或作為控制之用,有些字元可顯示於螢幕,有些則無法顯示在螢幕上,但能看到其效果(例如換行字元、歸位字元)。如下表:

第二部分 是由 20H 到 7FH 共 96 個,這 95 個字元是用來表示阿拉伯數字、英文字母大小寫和底線、括號等符號,都可以顯示在螢幕上。如下表:

Below is the standard ASCII characters.

Dec Char Dec Char Dec Char Dec Char Dec Char Dec Char
33 ! 49 1 65 A 81 Q 97 a 113 q
34 " 50 2 66 B 82 R 98 b 114 r
35 # 51 3 67 C 83 S 99 c 115 s
36 $ 52 4 68 D 84 T 100 d 116 t
37 % 53 5 69 E 85 U 101 e 117 u
38 & 54 6 70 F 86 V 102 f 118 v
39 ' 55 7 71 G 87 W 103 g 119 w
40 ( 56 8 72 H 88 X 104 h 120 x
41 ) 57 9 73 I 89 Y 105 i 121 y
42 * 58 : 74 J 90 Z 106 j 122 z
43 + 59 ; 75 K 91 [ 107 k 123 {
44 , 60 < 76 L 92 \ 108 l 124 |
45 - 61 = 77 M 93 ] 109 m 125 }
46 . 62 > 78 N 94 ^ 110 n 126 ~
47 / 63 ? 79 O 95 _ 111 o 127 _
48 0 64 @ 80 P 96 ` 112 p

第三部分 由 80H 到 0FFH 共 128 個字元,一般稱為『擴充字元』,這 128 個擴充字元是由 IBM 制定的,並非標準的 ASCII 碼。這些字元是用來表示框線、音標和其他歐洲非英語系的字母。

Higher ASCII chart

 

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

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

二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定 义编码)。
从上面可以看出文本文件基本上是定长编码的,基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编 码,UNICODE一般占16个比特。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较 熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来 记录bmp文件头的长度。。。大家可以看出来了吧,其编码是基于值的(不定长的,2、4、8字节长的值都有),所以BMP是二进制文件。

二、 文本文件与二进制文件的存取
文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流(前面已经说了, 存储都是二进制的),然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码 的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件 流"01000000_01000001_01000010_01000011"(下划线'_',是我为了增强可读性,而手动添加的),第一个8比特 '01000000'按ASCII码来解码的话,所对应的字符是字符'A',同理其它3个8比特可分别解码为'BCD',即这个文件流可解释成 “ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。
事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。 人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所 以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。

用记事本打开二进制文件与上面的情况类似。记事本无论打开什 么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流 '00000000_00000000_00000000_00000001'可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了"NULL_NULL_NULL_SOH"这四个控制符。
文本文件的存储与其读取基本上是个逆过程,不再累述。而二进 制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已,也不再叙述。  

三、文本文件与二进制文件的优缺点
因 为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字 符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率, 想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.
很多书上还认为,文本文件的可读性要好 些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说 的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进 制文件可读性差,比如读BMP文件,必须用读图软件.而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将'\n',换成'\r\n',所以文件读写时,操作系统需要一个一个字符的 检查当前字符是不是'\n'或'\r\n'). 这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件 时,这种存储转换又可能出来(如Linux系统和Windows系统共享文本文件)。

从编程的角度来讲,两种文件我们对待的方式是一样, 即都是01码,只是逻辑上对其的解释不一样而已

四、C++ 文件I/0

C++使用标准流作为I/O

 

 

http://www.cnblogs.com/chio/archive/2008/09/17/1292631.html

分享到:
评论

相关推荐

    文本文件与二进制文件

    "文本文件与二进制文件的差异和应用" 文本文件和二进制文件是计算机存储中的两种基本文件类型。它们的区别不在于物理存储,而在于逻辑上的编码方式不同。文本文件是基于字符编码的文件,常见的编码有 ASCII 编码、...

    C++文件转二进制,二进制转文件

    在C++编程中,将文件转换为二进制和从二进制还原文件是一项常见的任务,特别是在处理图像、音频、视频和其他数据时。这个过程涉及到读取文件内容并将其存储为二进制数据,以及从二进制数据中恢复原始文件。在VS2010...

    判断文件是文本文件还是二进制文件

    在计算机领域,文件可以分为两种主要类型:文本文件和二进制文件。了解如何区分这两种文件类型对于数据处理和程序开发至关重要。文本文件通常由可读的字符组成,如ASCII编码,而二进制文件则包含机器可理解的原始位...

    文本文件和二进制文件区别读写.rar

    在计算机编程中,文本文件和二进制文件是两种常见的数据存储形式,它们在读写方式上有着显著的差异。本文将深入探讨这两种文件类型及其在C语言中的处理方法。 首先,文本文件是以人类可读的形式存储数据的,通常...

    文本文件转换二进制文件

    2. **二进制文件**:与文本文件不同,二进制文件可以包含任何类型的数据,包括图像、音频、视频,甚至是程序代码。二进制文件通常以更紧凑的方式存储数据,因为它们不需要额外的字符编码。例如,一个.exe可执行文件...

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    文本文件与二进制文件的详细解释

    文本文件与二进制文件是计算机科学中两个重要的概念,它们在数据存储和处理中扮演着关键角色。本文将深入探讨这两种文件类型的定义、存取方法以及各自的优缺点,帮助读者全面理解它们在实际应用中的差异。 ### 一、...

    C语言实现文本文件/二进制文件格式互换

    本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示,并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #...

    二进制文件转换成文本文件,16进制显示.py

    二进制文件srcfile 转换成文本文件 targetfile,16进制显示。 二进制文件srcfile 转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件,16进制显示...

    二进制文件转换为文本文件的工具

    一个很有用的工具,可以将二进制文件转换为文本文件

    C++中文件以二进制形式和以文本形式打开的区别

    在C++中,文件以二进制形式和以文本形式打开及操作的区别是一个重要的概念,尤其是在处理不同类型的数据存储和读取需求时。本文将深入探讨这一主题,帮助读者理解二进制文件和文本文件在C++中的本质差异,以及如何...

    将二进制文件转换为16进制

    二进制文件(bin文件)通常包含机器可读的原始字节流,而十六进制文件则是二进制数据的一种人类可读的表示方式。本文将深入探讨如何将二进制文件转换为十六进制,并介绍相关编程实践。 首先,我们要理解二进制和...

    otxt2bintxt2otxt.rar_二进制 文本_文本文件 二进制 文件

    "otxt2bintxt2otxt.rar_二进制 文本_文本文件_二进制 文件"这个压缩包涉及了将文本文件与二进制文件之间相互转换的过程。这种转换在计算机科学和编程中具有重要意义,因为不同的系统和应用程序可能需要处理不同格式...

    文本文件转换成二进制文件

    在C或C++中,你可以通过以下步骤将文本文件转换为二进制文件: 1. 打开文本文件:使用`fopen`函数打开文本文件,指定模式为"r",表示读取模式。 2. 读取文本内容:利用`fgets`或`fread`函数逐行或逐字节读取文本...

    C++读取二进制文件

    读二进制文件,支持随机读取额,需要事先知道数据结构,欢迎使用

    c++二进制文件读取

    c++文件读取提供可靠源代码。cpp文件

    十六进制文本文件转十六进制格式文件命令窗程序

    十六进制的文本文件,转为十六进制格式的二进制文件。 从第一个有效字符开始,每2个有效字符(即0~F)输出一个格式化字节,"0x"、"\r\n"、空格等字符会被跳过。

    C++二进制文件读写

    C/C++实现简单的二进制文件读取和写入示例 1.包含如何读取和写入数字,以及用缓存按字节读取 2.采用标准输入和输出函数创建、打开、关闭文本文件或二进制文件

    C++读写文本文件和二进制文件(源代码)

    ### C++中的文本文件与二进制文件读写详解 #### 一、概述 本文将详细介绍如何使用C++中的`fstream`库来进行文本文件和二进制文件的读写操作。我们将通过具体的代码示例来解释如何利用这些功能,以及在实际应用中...

    c++操作二进制文件详解

    在C++编程中,操作二进制文件与文本文件的方式略有不同,因为二进制文件不涉及文本的格式化和转换。以下是对标题和描述中所述知识点的详细说明: 1. **二进制文件和文本文件的区别** - **文本文件**:文本文件是以...

Global site tag (gtag.js) - Google Analytics