精华内容
下载资源
问答
  • 在Windows系统中用文本模式打开文件时会发现文件中的换行符是\n,这看起来再正常不过了,但当你改为用二进制模式打开文件时会发现文件中的换行符变为\r\n。 事实上,在Windows系统中的的文件中的换行符都.

    所有文件的内容(在磁盘上)都以二进制表示。
    因为编码方式不同,导致展现的形式不同。

    定义:

    • 如果文件使用二进制编码的字符,如Unicode,ASCII表示文本,那么就是文本文件
    • 如果二进制代表的是机器语言,或图片,或音乐编码,该文件就是二进制文件

    区别:

    1. 对于字符串中\n的处理不同。
      在Windows系统中用文本模式打开文件时会发现文件中的换行符是\n,这看起来再正常不过了,但当你改为用二进制模式打开文件时会发现文件中的换行符变为\r\n
      事实上,在Windows系统中的的文件中的换行符都是\r\n,只不过在使用文本模式时,会把文件内容从文本的系统表示法映射为C表示法,而使用二进制表示法时不会进行映射转换。

    2. 以二进制模式打开文件是,可以逐字节读取文件。
      这也就是为什么在使用部分函数例如fseek()和ftell()时必须以二进制模式打开文件

    3. 使用文本模式打开文件时,就要用fprintf()写入数据,使用二进制模式打开文件时候,就要用fwrite()写入数据。
      这是因为fprintf()类型的函数会将数据转换为文本,而fwrite()这类函数则不会。

    总结:

    有关文本模式和二进制模式的区别主要就只有以上三点,在实现中应具体情况具体分析,灵活运用。

    文章内容可能会有错误和不足,希望发现的朋友能来私信我,我会积极改正,谢谢!

    展开全文
  • 1.二进制模式和文本模式 在C++中,当用ofstream,ifstream来打开文件的时候,会调用open函数, 函数定义如下: void open(const char *_Filename, ios_base::openmode _Mode = ios_base::out, 第一个参数是...

    1.二进制模式和文本模式

    在C++中,当用ofstreamifstream来打开文件的时候,会调用open函数,
    函数定义如下:

    	void open(const char *_Filename,
    		ios_base::openmode _Mode = ios_base::out,
    

    第一个参数是文件名,第二个参数是一系列标志位的组合,其中有一个是ios_base::binary,指示用二进制的模式来打开文件,默认是用文本的模式打开。

    2.两种模式的写入

    	ofstream osBinary;
    	osBinary.open("binary.txt", ios_base::binary);
    	osBinary.write("1", 1);
    	osBinary.write("\n", 1);
    	osBinary.write("2", 1);
    	osBinary.close();
    
    
    	ofstream osText;
    	osText.open("text.txt");
    	osText.write("1", 1);
    	osText.write("\n", 1);
    	osText.write("2", 1);
    	osText.close();
    

    我们输入上面一段代码,运行后可以看到:
    在这里插入图片描述
    在这里插入图片描述
    两个文件的大小不一致,binary.txt大小为3个字节,text.txt为4个字节。
    查看二者的十六进制数据:
    binary.txt为:
    在这里插入图片描述text.txt为:
    在这里插入图片描述

    0x31,0x32是字符‘1’,‘2’的ASCII编码,0x0d,0x0a是‘\r’,‘\n’的ASCII编码。在Windows下,以文本模式进行写入操作的时候,会将‘\n’转换成‘\r’、‘\n’两个字符,也就是回车换行,听说在Linux下不会。

    3.两种模式的读取

    输入下面代码:

    	ifstream isBinary;
    	isBinary.open("binary.txt", ios_base::binary);
    	isBinary.read(tempBinary, 3);
    	isBinary.close();
    	cout << "Binary:\t";
    	for (int i= 0; i < 3;++i)
    	{
    		cout << (int)tempBinary[i] << "\t";
    	}
    	cout << endl;
    	
    	
    
    	ifstream isText;
    	isText.open("text.txt");
    	isText.read(tempText, 4);
    	isText.close();
    
    	cout << "Text:\t";
    	for (int i = 0; i < 4; ++i)
    	{
    		cout << (int)tempText[i] << "\t";
    	}
    	cout << endl;
    

    输出:
    在这里插入图片描述
    以文本模式读取后,第四个字符为0,实际上是没有读取。前三个字符和二进制模式的一致。在Windows下,以文本模式读取文件的时候,遇到‘\r’‘\n’时,会转换成‘\n’,Linux下大概不会。

    4.总结

    在Windows下,以文本模式写入的时候,会把‘\n’转换成‘\r’‘\n’,而读取的时候,又会把‘\r’‘\n’转换成‘\n’,二进制模式并不会。Linux下也不会有这种转换。所以在Windows下要保证读取和写入的数据一致,最好保证读取和写入的时候用的是同一种模式。

    展开全文
  • 在c++项目开发中,时常涉及到文件读写...在文件读写时,调用fopen,无论以文本模式还是二进制模式打开文件,之后在进行文件读取写入,其结果都是一样的。因此,在linux平台下,以二进制方式创建的文件写入的文件...

    在c++项目开发中,时常涉及到文件读写操作。因此在这里先简单梳理和回顾一下文本模式和二进制模式在进行文件读写上的区别。

    1.linux平台下文本文件和二进制文件的读写

    在linux平台下进行文件读写时,文本模式和二进制模式没有区别。在文件读写时,调用fopen,无论以文本模式还是二进制模式打开文件,之后在进行文件读取和写入,其结果都是一样的。因此,在linux平台下,以二进制方式创建的文件和写入的文件,在以后的访问中,使用二进制或者文本方式均可以进行正确的读写;同理,以文本方式创建的文件和写入的文件,使用二进制或者文本模式均可以进行正确的读写。请看一下例子:

    1.1 以二进制模式打开并写入文件

    //例子1:以二进制模式打开并写入文件

    #include

    #include

    using namespace std;

    int main()

    {

    int m=;

    char s[] = "中国\n";

    FILE *fp = fopen("testBin.txt","wb"); //二进制模式

    if(NULL == fp )

    {

    return -;

    }

    int successCont=fwrite(&m,sizeof(int),,fp);

    if(successCont!=)

    cout<

    fwrite(s,sizeof(char),sizeof(s),fp);

    fprintf(fp,"%d",m); //格式化输出

    fclose(fp);

    return ;

    }

    查看testBin.txt的数据,如下:

    其中: 0061 0000为m的值97(我的计算机是小端序,文件的默认编码是utf-8), b8e4 e5ad bd9b为汉字中国对应的utf-8编码,0a为\n字符,3739 为字符7和9对应的ASCII值。

    1.2 以文本模式打开并写入文件

    修改1.1节中的第9行代码为FILE *fp = fopen("testTxt.txt","w"); //文本模式。然后重新运行程序,查看testTxt.txt文件,结果如下:

    可以发现,以文本模式打开并写入文件的结果和通过二进制模式写入文件的结果一致。

    2.windows平台下文本文件和二进制文件的读写

    下面,简单对比一下windows平台上以文本模式和二进制模式进行文件读写的差异。

    2.1 以文本模式打开并写入文件

    如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"/r/n"转换成"/n";当写入文件的时候,系统会将"/n"转换成"/r/n"写入。请看以下示例:

    #include

    #include

    using namespace std;

    int main()

    {

    int m = ;

    char s[] = "中国\n";

    FILE *fp = NULL;

    fopen_s(&fp,"winTxt.txt", "w");

    if (NULL == fp)

    {

    return -;

    }

    int successCont = fwrite(&m, sizeof(int), , fp);

    if (successCont != )

    cout << "error" << std::endl;

    fwrite(s, sizeof(char), sizeof(s), fp);

    fprintf(fp, "%d", m);

    fclose(fp);

    return ;

    }

    winTxt.txt结果如下:

    对比linux平台可以发现,\n(0x0a)前果然多了一个字符\r(0x0d)。

    2.2 以二进制模式打开并写入文件

    如果以"二进制"方式打开文件,则读/写都不会进行这样的转换。

    把2.1节中的第9行代码改为:fopen_s(&fp,"winBin.txt", "wb");运行,查看winBin.txt,结果如下:

    因此,在windos平台下开发中,以二进制模式创建并写入的文件,在读取时,为了防止读文件出错,建议以二进制模式进行读取;同样的道理,以文本模式创建并写入的文件,在读取该文件时,建议以文本模式进行读取。

    C&sol;C&plus;&plus;中二进制与文本方式打开文件的区别

    二进制与文本文件主要有两个大的区别: 1.换行符的区别: Windows平台下  对于Windows文本文件,它们使用回车和换行来表示换行符:如果以“文本”方式打开文件,当读取文件的时候,系统会将所有 ...

    C语言中以文本方式读写文件时换行符转换的注意事项

    我们知道在UNIX下是没有回车符(\r)的,只有换行符(\n),而C语言诞生于UNIX(Linux即面向开源的UNIX,Mac OS也是UNIX发展而来的,而Windows是从MS-DOS发展而来,与 ...

    《用格式化&lpar;fprintf和fscanf函数&rpar;的方式读写文件》

    //用格式化(fprintf和fscanf函数)的方式读写文件 [用格式化的方式向文件中写入数据]#include#include int ...

    C语言采用文本方式和二进制方式打开文件的区别分析

    稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...

    Windows读写文件的猫腻

    这里主要涉及对于回车换行的讨论. 回车:\r 换行:\n Windows读写文件分为普通文件读写和二进制文件读写. 如果以二进制的方式读写文件(如rb, wb),将会完全的把文件内容读出来,不做任何处 ...

    计算机程序的思维逻辑 &lpar;60&rpar; - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

    Java编程的逻辑 &lpar;60&rpar; - 随机读写文件及其应用 - 实现一个简单的KV数据库

    本系列文章经补充和完善,已修订整理成书,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

    背水一战 Windows 10 &lpar;89&rpar; - 文件系统&colon; 读写文本数据&comma; 读写二进制数据&comma; 读写流数据

    [源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...

    随机推荐

    java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

    RSS阅读器python实现概述

    这边简单说一下最近倒腾的RSS阅读器的小东东,RSS阅读器估计很多人用过或者自己动手实现过.首先wudagang0123多年前提供的一个示例:http://bbs.chinaunix.net/foru ...

    关于python函数的学习记录

    1.默认参数必须指向不变对象! 2. extra = {'city': 'Beijing', 'job': 'Engineer'}注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函 ...

    I帧 B帧 p帧 IDR帧的区别

    转自:http://blog.csdn.net/sphone89/article/details/8086071 IDR(Instantaneous Decoding Refresh)--即时解码刷新 ...

    bash if 表达式

    .bash把[[ $a -lt $b ]]看作一个单独的元素,并且返回一个退出码.退出码0为真,非零为假 例如: a= b=c [[ $a -lt $b ]] echo $? # a小于b为真 [[ ...

    vs code 使用git

    1.下载git https://git-scm.com/ 2. git 全局设置 git config --global user.name "xxxx" git config - ...

    python PIL模块学习

    PIL PIL:Python Imaging Library.对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础. PIL安装 安装推荐别人的吧, ...

    HTML DOCTYPE 的重要性

    定义和用法 声明必须是 HTML 文档的第一行,位于 标签之前. 声明不是 HTML 标签:它是指示 we ...

    WebSocket原理与实践&lpar;四&rpar;--生成数据帧

    WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...

    Git 子模块:git submodule

    imtianx 2018年03月08日阅读 2057 Git 子模块:git submodule 工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景.比如,在项目中引用第三方库.或者 ...

    展开全文
  • 狭义的二进制文件即除文本文件以外的文件。文本文件是一种由很多行字符构成的计算机文件。文本文件存在于计算机系统中,通常在文本文件最后一行放置文件结束标志。文本文件的编码基于字符定长,译码相对要容易一些;...

    定义

    广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名。狭义的二进制文件即除文本文件以外的文件。文本文件是一种由很多行字符构成的计算机文件。文本文件存在于计算机系统中,通常在文本文件最后一行放置文件结束标志。文本文件的编码基于字符定长,译码相对要容易一些;二进制文件编码是变长的,灵活利用率要高,而译码要难一些,不同的二进制文件译码方式是不同的。

    从本质上来说他们之间没有什么区别,因为他们在硬盘上都有一种的存放方式--二进制,但是如果要对他们有些区分的话,那可以这样理解。每个字符由一个或多个字节组成,每个字节都是用的-128—127之间的部分数值来表示的,也就是说,-128——127之间还有一些数据没有对应任何字符的任何字节。如果一个文件中的每个字节的内容都是可以表示成字符的数据,我们就可以称这个文件为文本文件,可见,文本文件只是二进制文件中的一种特例,为了与文本文件相区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。

    使用二进制文件的好处

    为什么要使用二进制文件。原因大概有三个:

    第一是二进制文件比较节约空间,这两者储存字符型数据时并没有差别。但是在储存数字,特别是实型数字时,二进制更节省空间,比如储存 Real*4 的数据:3.1415927,文本文件需要 9 个字节,分别储存:3 . 1 4 1 5 9 2 7 这 9 个 ASCII 值,而二进制文件只需要 4 个字节(DB 0F 49 40)

    第二个原因是,内存中参加计算的数据都是用二进制无格式储存起来的,因此,使用二进制储存到文件就更快捷。如果储存为文本文件,则需要一个转换的过程。在数据量很大的时候,两者就会有明显的速度差别了。

    第三,就是一些比较精确的数据,使用二进制储存不会造成有效位的丢失。[1]

    二进制文件的储存方式

    列举一个二进制文件如下:

    00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54

    00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50; ABCDEFGHIGKLMNOP

    这里列出的是在 UltraEdit(UE) 里看到的东西。其实只有红色部分是文件内容。前面的是 UE 加入的行号。后面的是 UE 尝试解释为字符型的参考。

    这个文件一共有 32 字节长。显示为两列,每列 16 个字节。实际上,这仅仅是 UE 的显示而已。真实的文件并不分行。仅仅知道这个文件的内容,如果我们没有任何说明的话,是不能看出任何有用信息的。

    下面我规定一下说明:我们认为,前 4 个字节是一个 4 字节的整型数据(0F 01 00 00 十六进制:10Fh 十进制:271)。这 4 个字节之后的 4 个字节是另一个 4 字节的整型数据(0F 03 00 00 十六进制:30Fh 十进制:783)。其后的 4 个字节(12 53 21 45 )表示一个 4 字节的实型数据:2.5811919E+3。再其后的 4 个字节(58 62 35 34)表示另一个 4 字节的实行数据:1.6892716E-7。而只后的 16 个字节(41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50)我们认为是 16 个字节的字符串(ABCDEFGHIGKLMNOP)

    实际上,二进制文件只是储存数据,并不写明数据类型,比如上面的第 9 字节到第 16 字节(12 53 21 45 58 62 35 34),我们刚才认为是 2 个 4 字节的实型,其实也可以认为是 8 个字节的字符型( S!EXb54)。而后面的 16 个字节的字符串(ABCDEFGHIGKLMNOP),我们也可以认为是 2 个 8 字节的整型,或者 4 个 4 字节的整型,甚至 2 个 8 字节的实型,4 个 4 字节的实型,等等等等。

    因此,面对一个二进制文件,我们不能准确地知道它的含义,我们需要他的数据储存方式的说明。这个说明告诉我们第几个字节到第几个字节是什么类型的数据,储存的数据是什么含义。否则的话,我们只能猜测,或者无能为力。[1]

    如何使用语句操作二进制文件

    我们将上面的那个二进制文件保存为:TestBin.Bin 来举例。

    读取和写入二进制其实是两个很类似的操作,了解了其中之一,另一个也就不难了。

    二进制文件我们通常使用直接读取方式,Open 语句可以写为:

    引用:

    Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , Form = 'Unformatted' , RecL = 4 )

    上面的 Access 表示直接读取方式,Form 表示无格式储存。比较重要的是 RecL 。我们读取数据时,是用记录来描述单位的,每一次读入或写入是一个记录。记录的长度在 Open 时就确定下来,以后不能改变。如果需要改变,只能 Close 以后再此 Open。

    记录长度在某些编译器下表示读取的 4 字节长度的倍数,规定为 4 表示记录长度为 16 字节。有些编译器下就直接表示记录的字节数,规定为 4 则表示记录长度为 4 字节。这个问题需要参考编译器手册。在 VF 系列里,这个值是前面一个含义。可以通过设置工程属性的 Fortran,Data,Use Bytes as RECL= Unit for Unformatted Files 来改变,使之成为后一个含义。在命令行模式下,则使用 /assume:byterecl 这个编译选项。

    确定 RecL 大小是我们需要做的事情,一般来说,不适合太大,也不适合太小。还需要结合数据储存方式来考虑。太小的话,我们需要执行读写的次数就多,太大的话,我们就不方便操作小范围的数据。

    有时候我们甚至会分多次来读取数据,每一次的 RecL 都不同。对于上面的 TestBin.Bin 文件来说,它比较简单,我以 16 字节长度和 8 字节长度两种读取方式来演示,你甚至可以一次 32 个字节长度全部读完。[1]

    用例

    C++程序语言学习过程中常见名词,相对于Binary file的是Text file(纯文本文件)。

    C++中二进制文件读写函数:

    fread

    fwrite

    ifstream.read()

    ofstream.write()

    文件读

    文件写

    等等……

    Java中二进制文件读写函数:

    FileInputStream()

    FileOutputStream()

    文件输入流()

    文件输出流()

    等等……

    那么,这个时候我们肯定会问:

    汉字怎样转化为二进制代码?

    各数制之间的转换

    我们用R表示任何数制的基数,讨论各数制之间的转换。

    1.R进制数转换为十进制数

    二进制、八进制和十六进制数转换为等值的十进制数,只要把它们用多项式表示并在十进制下进行计算,所得的结果就是十进制数。

    2.十进制数转换为R进制数

    十进制数转换为等值的二进制、八进制和十六进制数,需要对整数部分和小数部分分别进行转换。其整数部分用连续除以基数R取余数的方法来完成,小数部分用连续乘以基数R取整数的方法来实现。

    基数   基数   基数   基数   基数

    十进制  10000  1000   100   10    1

    二进制   16    8    4    2    1

    八进制  4096   512    64   8    1

    十六进制 65536  4096   256   16    1

    3.二进制数与八进制数、十六进制数的转换

    二进制数与八进制数的转换应以"3位二进制数对应1位八进制数"%的原则进行。同理,因为24=16,则二进制数与十六进制数的转换应以"4位二进制数对应1位十六进制数"的原则进行。

    四、二进制数的运算

    在计算机中,二进制数的运算包括算术运算和逻辑运算。

    1.二进制数的算术运算

    (1)二进制数加法

    加法原则:逢二进一

    (2)二进制数减法

    减法原则:借一当二

    (3)二进制数乘法

    乘法原则:与算术乘法形式相同

    (4)二进制数除法

    除法原则:与算术除法形式相同

    2.二进制数的逻辑运算

    逻辑运算是以二进制数为基础的,逻辑变量只有两个,用来表示逻辑"真"和"假"。

    (1)逻辑加法("或"运算)

    运算符号:"+"或"∨"

    运算规则:0+0=0;0+1=1;1+0=1;1+1=1;

    (2)逻辑乘法("与"运算)

    运算符号:"×"或"∧"

    运算规则:0×0=0;0×1=0;1×0=0;1×1=1;

    (3)逻辑"非"运算

    运算符号:"-"%运算规则:A&-*=0时,A=1

    五、数据类型及数据单位

    1.数据的两种类型

    计算机中的数据可概括分为两大类:数值型数据和字符型数据。所有的非数值型数据都要经过数字化后才能在计算机中存储和处理。

    2.数据单位

    在计算机中通常使用三个数据单位:位、字节和字。位的概念是:最小的存储单位,英文名称是bit,常用小写b或bit表示。用8位二进制数作为表示字符和数字的基本单元,

    英文名称是byte,称为一字节。通常用大"B"表示。

    1B(字节)=8b(位)

    1KB(千字节)=1024B(字节)

    1MB(兆字节)=1024KB(千字节)

    字长:字长也称为字或计算机字,它是计算机能并行处理的二进制数的位数。

    六、字符编码与汉字编码

    1.字符编码

    目前微型机中普遍采用的字符编码是ASCII码。它是用七位二进制数对127个字符进行编码,其中前32个是一些不可打印的控制符号。

    2.汉字编码及字模信息

    汉字有两种编码:国标码与机内码。

    国标码是"中华人民共和国国家标准信息交换汉字编码",代号为"GB2312-80"。在国标码的字符集中,收集了一级汉字3755个,二级汉字3008个,图形符号682个,共7445个。一个汉字对应一个区位码,由四位数字组成,前两位数字为区码(0~94),后两位数字为位码(0~94)。机内码是指汉字在计算机中的编码

    汉字的机内码占两个字节,分别称为机内码的高位与低位。它们与区位码的关系如下:

    机内码高位=区码+A0H

    机内码低位=位码+A0H

    汉字字库是由所有汉字的字模信息构成的。一个汉字字模信息占若干字节,究竟占多少个字节由汉字的字形决定。

    例如,如果用16×16点阵表示一个汉字,则一个汉字占16行,每行有16个点,在存储时用两个字节存放一行上16个点的信息,对应位为"0"表示该点为"白","1"表示该点为"黑"。因此,一个16×16点阵的汉字占32个字节。

    ---------------------------------------------------------------

    描述2进制的数据结构,用字符串直观,但是效率低,用数组效率高,但是不直观。

    但是道理相同。

    性字转换后的结果:

    010000010000 010010010000 010010010100 111011111110 110010010000 010100010000 010011111110 010000010000 010000010000 010000010000 010111111110 000000000000

    144位编码,这也不可能的,

    性字编码alert asc("性")得到-12076,转化为2进制为-10111100101100 不算正负有14位就够了。

    如果非要补到144位也因该是高位补0。

    function c10to2(x)

    '10进制到2进制的转换

    dim sign, result

    result = ""

    '符号

    sign = sgn(x)

    x = abs(x)

    if x = 0 then

    c10to2 = 0

    exit function

    end if

    do until x = "0"

    result = result & (x mod 2)

    x = x \ 2

    loop

    result = strReverse(result)

    if sign = -1 then

    c10to2 = "-" & result

    else

    c10to2 = result

    end if

    end function

    ---------------------------------------------------------------

    另外一个人的写法:

    function c10to2(x)

    mysign=sgn(x)

    x=abs(x)

    DigS=1

    do

    if x<2^DigS

    二进制编码转汉字:

    1. 汉字信息交换码(国标码)

    《信息交换用汉字 编码字符集·基本集》是我国于1980年制定的国家标准 GB2312-80,代号为国标码,是国家规定的用于汉字信息处理使用的代码依据。

    GB2312-80中规定了信息交换用的6763个汉字和682个非汉字图形符号(包括几种外文字母、数字和符号)的代码。

    6763个汉字又按其 使用频度、组词能力以及用途大小分成一级常用汉字3755个和二级常用汉字3008个。

    一级汉字按拼音字母顺序排列;若遇同音字,则 按起笔的笔形顺序排列;若起笔相同,则按第二笔的笔形顺序排列,依次类推。所谓笔形顺序,就是横、竖、撇、点和折的顺序。二级汉字按 部首顺序排列。

    在此标准中,每个汉字(图形符号)采用双字节表示。每个字节只用低7位,最高位恒为1。由于低7位中有34种状态是用 于控制字符,因此,只有94(128-34=94)种状态可用于汉字编码。这样,双字节的低7位只能表示94×94=8836种状态。

    编码范围

    十进制数码

    基本 ASCII 码

    00000000~01111111

    0~127

    控制字符

    00000000~00100000、01111111

    0~32、127

    可用汉字段

    00100001~01111110

    33~126 (1~94)

    扩充 ASCII 码

    10000000~11111111

    128~255

    控制字符

    10000000~10100000、11111111

    128~160、255

    GB2312-80

    10100001~11111110

    161~254 (1~94)

    此标准的汉字编码表有94行、94列,其行号称为区号,列号称为位号。双字节中,用 高字节表示区号,低字节表示位号。非汉字图形符号置于第1~11区,一级汉字3755个且于第16~55区,二级汉字3008个置于第56~87区。

    每个图形字符的汉字交换码,均用两个字节的低7位二进制码表示。汉字国标码通常用十六进制数表示。

    例如:“中”字的区号为 54,位号为48,计算它的二进制数和十六进制数国标码。

    解:先将区、位号分别加上 32 :

    54+32=86

    48+32=80

    分别转换为二进制数:

    (86)10=01010110

    (80)10=0 1010000

    得到二进制数国标码为:

    01010110 01010000。

    最后通过 8 4 2 1 ── 二进制取位法转换成十六 进制汉字国标码为:5650。

    又如“国”字的区号为25,位号为90,用以上相同的方法得到它的国标码为:

    二进制:00111001 01111010

    十六进制:397A

    ----------------------------------------------------------------

    基于以上原则,则

    11000100,11100011,10111010,11000011

    >(1100 0100 1110 0011)2,(1011 1010 1100 0011)2

    >(C4E3)16,(BAC3)16

    >查表可知:C4E3>>‘你’,BAC3>>‘好’

    展开全文
  • 文件有两种,文本文件和二进制文件。读写文本文件比较简单,也在这里简单说一下;读写二进制文件用到了struct库,涉及一些大端小端、字节填充等概念,稍微有点复杂。文件打开关闭在读写文件之前,需要打开文件,...
  • 稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开...
  • 本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示,并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。具体代码如下:#...
  • 模式二进制

    2021-07-10 09:43:40
    最终他们认为用把信息翻译成二进制的01,用电路通电与否or高低电压表示01,这样最容易辨认,并且可以组合成足够多的排列顺序来表示信息,比如10表示2,100表示4。同时,因为有跟逻辑计算的数学理论的存在,01...
  • 我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。具体的说:1。以哪种方式...
  • 掌握C语言二进制文件读写方式;掌握CPP文本文件读写方式;掌握CPP二进制文件读写方式;二:C语言文本文件读写1. 文本文件写入//采用C模式对Txt进行写出void TxtWrite_Cmode(){//准备数据int index[50] ;double x_pos...
  • 使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含"b"使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个(?),其中 12 个包含"binary"使用 python 的 open 打开文件,除了可以使用 C ...
  • 前面的话Python内置的base64模块,在这里http://docs.python.org/library/base64.html?highlight=base64#base64,包括b64...但是在用base64.encode编码二进制文件的时候,发现编码不完整,只有部分文件被编码了,b...
  • Ftp,winscp等工具下载文件时候有选项,可选的有二进制方式和文本方式。文本方式又称为ASCII方式两者区别如下。ASCII 方式BINARY方式的区别是回车换行的处理,binary方式不对数据执行任何处理,ASCII 方式将回车...
  • 在python3上打开要与模块csv一起使用的文件时,always应该添加newline=""open语句:import sysmode = 'w'if sys.version_info[0] < 3:mode = 'wb'# python 3 writewith open("somefile.txt", mode, newline="") ...
  • 直接将InputStream用于二进制数据,并将其顶部的InputStreamReader用于UTF-8文本是行不通的,因为阅读器将提前读取并弄乱后续的二进制数据,即使被告知要读取最大值n个字符。我知道这个问题与以多种格式从...
  • (让我们假设int的大小等于4)使用文本文件或二进制文件,在内存方面有什么效率更高? 我不确定如何解决这个问题,欢迎您的帮助由于数据在磁盘上,因此内存与此无关。将其从磁盘上删除是另一回事。在撰写本文时,您的...
  • ftp,securecrt,winscp等工具下载文件时候有选项,可选的有二进制方式和文本方式,文本方式又称为ascii方式ascii方式binary方式的区别是回车换行的处理binary方式不对数据执行任何处理ascii方式将回车换行转换为本...
  • 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码: 00110101 ...
  • Python文件操作文本文件和二进制文件文件操作相关模块open()创建文件对象文本文件写入步骤write()/writelines()写入数据close()关闭文件流with 语句(上下文管理器)常用编码ASCIIISO8859-1GB2312,GBK,GB18030GB2312...
  • 在使用ftp传输文件时,...文本传输器使用ASCII字符,并由回车键换行符分开,而二进制不用转换或格式化就可传字符,二进制模式文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式...
  • 一、打开文件 文件的操作步骤: • 打开文件 • 对文件进行各种操作(读、写)然后保存...• 一种 二进制文件(图片 mp3 视频…) open()打开文件时,默认是以文本文件的形式打开的。 1、open()函数 open(file, mode=‘r’,
  • 一个完整的程序一般都包括数据的存储读取;我们在前面写的程序数据都没有进行实 际的存储,因此 python 解释器执行完数据就消失了。实际开发中,我们经常需要从外部存 储介质(硬盘、光盘、U 盘等)读取数据...二进制
  • 哪个选项不是Python文件二进制打开模式的合法组合?答:\"x+\"中国大学MOOC: 抽象是关注事物的个别特征答:错信念是一种单纯的知识想法。( )答:错误科学发展观的核心内容是答:错误关于人类寿命的假说包括:()答...
  • 一、在Linux下查看二进制文件的软件:xxdhexdump二、编辑:1、biew2、hexedit3、vimVim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读 取一个文件,改动一个字符,然后把它存盘。结果是你的...
  • 本次我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 205,247
精华内容 82,098
关键字:

文本模式和二进制模式