精华内容
下载资源
问答
  • C语言读取文件中文本模式和二进制模式的区别

    千次阅读 多人点赞 2016-07-22 16:14:58
     在学习C语言读取文件的时候,首先学习到的是C语言读取文件时分文本模式和二进制模式。给好多人造成疑惑,文件存储时要分类?二进制存储和文本存储完全不相同?对于纯文本必须使用文本模式?对于纯数字必须使用二...

    一、疑惑

      在学习C语言读取文件的时候,首先学习到的是C语言读取文件时分文本模式和二进制模式。给好多人造成疑惑,文件存储时要分类?二进制存储和文本存储完全不相同?对于纯文本必须使用文本模式?对于纯数字必须使用二进制模式?如果你对这些有疑惑,这篇文章适合你,如果你是来看函数时如何使用的,可能你要另寻他处了。

    二、明白关键一点

      任何数据在内存中或者硬盘上的存储都是1、0组成的序列,从硬盘、内存这个角度看根本不存在什么二进制和文本模式之分。

    三、区别

      稍对C语言操作文件有了解都知道2点:1、首先应该fopen打开文件2、有两类文件操作函数,对应着二进制模式和文本模式。

      两个模式的区别在两个地方,这两个地方的区别正好体现在刚才说的2点上。

      1、 打开文件时选择模式

        使用fopen函数时,要给予第二个参数一个值,告诉fopen使用什么模式打开文件。这里的参数决定的就是第一个区别:对于字符串中的\n如何处理?

         教材中说,文本模式中,在存储\n时要转化为\r\n,读取文件时进行逆转换。二进制模式时,则不进行转换。当然这是在操作系统是Windows的条件下。

        首先我们要知道回车和换行是不相同的,Windows中文字另起一行内存表示为<回车><换行>对应\r\n,而Linux、Unix中则是单单一个<换行>对应\n。Mac中则是一个<回车>对应\r

        C语言起源于Unix的产生,对于文件中的另起一行,Unix采用单个\n表示。所以我们通常在输出一个短话想换行时加一个\n就可以了,Windows也是如此。到了数据从内存到硬盘上进行存储时,对于unix来说,\n照样是\n。而Windows为了防止读取时混乱必须转换为\r\n。Mac呢,就是\r。

        这就是第一区别,这个区别是体现在fopen第二个参数,跟你使用文本模式的函数还是二进制模式的函数根本不相关!你可以做一个实验,使用二进制模式的函对于同样的字符串:”Hello\n”,当fopen使用w参数写入文件,无论是fwrite还是fprintf都会对\n会进行转换,而使用wb参数则都不进行转换。

      2、  两种不同模式的函数

        打开文件后,要进行数据写入。

        教材中说,使用文本模式打开文件,就要用fprintf写入数据,使用二进制模式打开文件,就要用fwrite写入数据。

        其实你用文本模式打开文件,一个字符串,fprintf、fwrite都能写入文件,写入还都是一样的数据。使用两类函数的区别其实在于数字的处理上。

        对于一个数字5,你用fprintf写入,将把数字5转换为字符5,将其对应的ASCII编码存入存储器,占用1个字节。但实际上数字5就是数字5,对应2进制101,整形占用4个字节。fwrite则将这个数字在内存中占用的4个字节全部原样写入到硬盘中,占4个字节。

        而同样对于一段字符串”Hello”,使用ASCII编码对于fprintf和fwrite都能原样写到硬盘中。

        同样对于这个区别,你仍然能做个实验,对于一个int型数字5,你如何用fprintf和fwrite写入到硬盘中,他们对应的十六进制码是多少?对于一段字符串你再用两个函数分别写到硬盘中,你看看对应的十六进制码是什么。这个实验跟你用fopen如何指定第二个参数无关。

    四、总结

      文本模式和二进制模式其实就2个简单的区别,抓住这两个核心完全能搞懂两种模式的不同。

      对于第一个区别完全是因为操作系统的差异导致,C作为一个跨平台的语言必须要设计一种方法解决这个跨平台的问题,如果3个平台对于另起一行这个操作统一是不存在这第一个区别的

      对于第二个区别,一切数据的存储都是二进制1、0存储,只不过对于数字,既可以认为是一个数字,也可以认为是一个字符,这就是产生第二个区别的原因

    展开全文
  • 二进制模式:将内存中的数据...文本模式:将内存中的数据(01序列),通过文本格式控制,转化成可理解的字面意义,将转化后的字面意义输入到文件中,从字面意义到文件又进行一次转化,将字面意义转化成01序列存储起来。
    二进制模式:将内存中的数据(01序列)直接传送到文件中,没有任何转换。如:char ch = 0x7d; fwrite(&ch, sizeof(char), 1, pfile);直接把0x7d这个01序列存储到文件中。
    

    文本模式:将内存中的数据(01序列),通过文本格式控制,转化成可理解的字面意义,将转化后的字面意义输入到文件中,从字面意义到文件又进行一次转化,将字面意义转化成01序列存储起来。如:char ch = 0x7d; fprintf(fp, “%d”, ch);这个过程就是0x7d -->123-->0x31 0x32 0x37的二进制序列存储到二进制文件中,再用vim之类的文本编辑器打开文件时就可以看到123这个字面意义。

    实验代码:

    #include<stdio.h>               
                                    
    int main(int argc, char *argv[])
    {                               
        FILE *pfile = NULL;         
        FILE *pfile2 = NULL;        
        char *file_name = "myfile.bin";
        char *file_name2 = "myfile.txt";
        char ch = 0x7d;             
        pfile = fopen(file_name, "wb");                                                                                                     
        pfile2 = fopen(file_name2, "w");
        size_t wcount = fwrite(&ch, sizeof(char), 1, pfile);
                                    
        fprintf(pfile2, "%d", ch);
        return 0;                   
    }         

    注意事项:

    使用fopen打开文件后可以一直往里面追加,不用重新打开,当完全写入完毕时,fclose要关闭,否则会出现莫名的错误。

    展开全文
  • 文本模式下,汉字不能显示,参照网上的解决办法如下: sudo apt-get install zhcon sudo vi /etc/zhcon.conf 打开后发现第一个就是拼音,应该是在图形界面用的中文,所以这里就不用设置了,我的是按ctrl+2出现...

    在文本模式下,汉字不能显示,参照网上的解决办法如下:

    sudo apt-get install zhcon

    sudo vi /etc/zhcon.conf   打开后发现第一个就是拼音,应该是在图形界面用的中文,所以这里就不用设置了,我的是按ctrl+2出现全拼。

    sudo zhcon --utf8     然后出现以下界面,再用ls查看以下,汉字就能显示了。ok了

    (使用sudo zhcon --utf8会在root模式下可以显示汉字,但返回普通用户又不能正常显示汉字了,所以直接使用zhcon --utf8可以在普通用户模式下正常显示汉字)

    使用exit命令后,就又不能正常显示汉字了

     

    以下是网上的解决办法:

    ubuntu 文本模式下如何显示/输入中文────顺便纠正网上的一些说法  

    2011-02-16 15:54:57|  分类:LINUX|  标签:|举报|字号 订阅

    文本/字符模式下的中文问题一般有三种方法:
    一、fbterm+ucimf
    这个相对有点复杂,而且不好用。可以参考这个帖子:
    http://ubuntu.group.javaeye.com/group/topic/15090

    二、zhcon 这个是我现在用的,挺好的。但是网上说的方法有误,会导致黑屏及调不出输入法。
    1、安装文本模式下的中文支持,你安装它必须输入指令:
    sudo apt-get install zhcon

    2、编辑配置文件
    通过阅读/etc/zhcon.conf文件可以知道,zhcon的配置文件可以有两份,一份是/etc /zhcon.conf(公用),另一份则是~/.zhconrc(私用,优先权高于公用那个,如果没有可以拷贝一个/etc/zhcon.conf副本,也可以不用拷备,直接用/et/zhcon.conf
    sudo gedit /etc/zhcon.conf
    在该文件的98行(你的也许不一定是98行),列出了可用的输入法,但是只有排第一位的输入法可用(冲突问题,输入法切换热键冲突),把你想要的输入法复制到第一位,或者采用加#号屏蔽的方式,像我这样:我用的是五笔
    #ime = 智能拼音,modules/cce/cce_pinyin.so,modules/cce/dict,gb2312,unicon
    #ime = 全拼,,input/winpy.mb,gb2312,native
    ime = 五笔,,input/wb.mb,gb2312,native
    ime = 双拼,,input/winsp.mb,gb2312,native
    ime = ︽30,,input/big5-ary30.mb,big5,native
    3、运行zhcon这里是关键,最新的zhcon不用加vga参数,它会采用auto模式,对于宽屏显示器来说,使用了vag参数反而会黑屏,到时只有Reset,但是utf8是必须的,所以运行命令直接为:
    sudo zhcon --utf8
    4、切换输入法,这里也是关键,根本就不是网上说的CTRL_SPACE,原文档也是这么说的#the first ime is the default ime when press CTRL_SPACE,但是可能是因为冲突的原因,它变成了
    CTRL_1或CTRL_2或CTRL_3等等。

    三、利用远程终端PUTTY解决,这个方法是最方便的了,可以直接在WINDOWS系统下输入中文,而且可以剪切,粘贴。注意要选择 UTF-8字符转换集。
    展开全文
  •  在我看来不论文本文件、二进制文件都不过是0和1或者是十六进制的(这也是学习硬件的好处,理解底层)。 就如我们写入数据 "abc123" ,那么就是写入的 0x61,0x62,0x63,0x31,0x32,0x33 , 但是fwrite,fread这两个函数...

     

    最进写一个日志类,用到文件操作(windows下的),顺便多封装一个文件类!

     

    在我看来不论文本文件、二进制文件都不过是0和1或者是十六进制的(这也是学习硬件的好处,理解底层)。

     

    就如我们写入数据 "abc123" ,那么就是写入的 0x61,0x62,0x63,0x31,0x32,0x33 ,

     

    但是fwrite,fread这两个函数却隐藏了一些东西, 看下面的代码(测试环境:VC6.0) :

     

     char szBuf[1000];

     

     FILE *pf1 = fopen("C://c.txt","wb"); //以二进制方式写入
     fwrite("abc/n",1,4,pf1);    // 函数返回4
     fclose(pf1);

     

     FILE *pf2 = fopen("C://c.txt","rb"); //以二进制方式读取
     fread(szBuf,1,1000,pf2); // 函数返回4,szBuf的值为 0x61,0x62,0x63,0x0A
     fclose(pf2);

     

    最终在windows系统的C://路径下看到c.txt为4字节大小.

     

    再看下面代码:

     char szBuf[1000];

     FILE *pf1 = fopen("C://c.txt","wt");//以文本方式写入
     fwrite("abc/n",1,4,pf1);  //返回4                
     fclose(pf1);

     FILE *pf2 = fopen("C://c.txt","rt"); //以文本方式读取
     fread(szBuf,1,1000,pf2);//返回4,szBuf的值为 0x61,0x62,0x63,0x0A
     fclose(pf2);

     

    这段代码和上面代码在VC6.0里的所有结果都一样,但是在windows资源管理器中可以看到c.txt文件大小为5个字节!!

    为什么呢?

     有一种说法:'/n',即换行符,即十六进制0x0A在文本模式下(wt),fwrite()写入两个字符,下面的代码说明了这一点:

     FILE *pf1 = fopen("C://c.txt","wt"); //以文本方式写入
     fwrite("abc/n",1,4,pf1); // 函数返回4
     fclose(pf1);

     FILE *pf2 = fopen("C://c.txt","rb"); //以二进制方式读取
     fread(szBuf,1,1000,pf2);//返回5,szBuf的值为 0x61,0x62,0x63,0x0D,0x0A 
     fclose(pf2);

     

    也就是说:

    在文本模式下,

    fwrite();把0X0A,翻译成0X0D,0X0A了,

    fread();把0x0D,0x0A翻译成0X0A.所以在文本模式下一个换行会返回两个'/n'(0x0A),所以在求行数时要/2

    而二进制模式则不会做这样的处理

    展开全文
  • 如果要打开一个二进制文件,需要加b,在文本打开模式基础上,类似如下方式 "rb", "wb", "ab", "r+b", "w+b", "a+b"或者是"rb+", "wb+", "ab+" Additional characters may follow the sequence, although they should...
  • C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析 C语言文件打开模式浅析 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: ... 文本模式 r ...
  • jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0); WritableCellFormat contentFromart = new WritableCellFormat(NumberFormats.TEXT); jxl.write.Label value_04 = new jxl.write.Label(3, ...
  • 其中,二进制模式与文本模式操作相似,只不过是以二进制流的形式读写而已,下面以文本模式为例分析:1."r"模式:1.1打开文件进行“只读”操作,即只能从文件读取内容。1.2若欲操作的文件不存在...
  • 文件属于外存的范畴: 其实不管是文本文件还是二进制的文件,其... w 和 wb方式打开文件并进行写的操作的区别&amp;gt; 最常听到回答就是: r 是以文本文件的方式打开并且是只读方式打开 rb 是以二进制的凡...
  • 解析文本文件 r 与 rb 模式的区别(Python)
  • C语言文件打开模式浅析。
  • 打开文件的函数原型 FILE *fopen( const char * filename, const char * mode ); 读、写文件的几种模式 模式 描述 ... 文件的类型为文本文件。 + 具有文件的读写权限。 r:以只读的方式打.
  • python中,当使用open函数打开一个文件时,可以通过mode参数指定打开的模式,以下是一个大概的对模式的总结和说明。 'r': 读取模式(默认),需要文件已经存在; 'w': 写入模式,如果原文件已经存在,会覆盖原文件...
  • python文件读写模式 --- r,w,a,r+,w+,a+,rb,wb

    万次阅读 多人点赞 2018-10-24 13:27:48
    要了解文件读写模式,需要了解几种模式的区别,以及对应指针 r : 读取文件,若文件不存在则会报错 w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件 a : 写入文件,若文件不存在则会先创建再写入,但...
  • fopen wb 参数

    千次阅读 2009-10-14 10:23:00
    对于模式参数的”w”和”wb”,”r”和”rb”,我起初并不是很理解,按照课本上的说法,”w”是以文本的形式进行写入,而”wb”是以二进制模式进行写入.这样的解释令人感觉有点玄乎,不能准确理解. 最近写了个小程序,把...
  • fopen w wb mode

    千次阅读 2013-06-05 09:32:40
    函数fopen是一个标准c函数,其功能是打开一个文件,之后便可以进行读或写的操作.其原型是这样的:  ...对于模式参数的w和wb,r和rb,w是以文本的形式进行写入,而wb是以二进制模式进行写入. 对于换行符数据0
  • python之文本处理

    2020-12-22 07:37:22
    文本文件的处理 打开文件 函数:open(filename,mode) filename => 访问的文件 mode => 访问模式 常见模式 作用 r 只读 r+ 读写 w 只写 文件存在则覆盖,不存在则创建 w+ 只写 文件存在则覆盖,不存在则...
  • 中文文本分类

    千次阅读 2019-08-13 23:54:07
    文本挖掘(Text Mining)是从一个非机构化文本信息中获取用户感兴趣或者有用的模式过程。文本挖掘的 7 个主要领域如下: 搜索和信息检索:存储和文本文档的检索,包括搜索引擎和文档的检索。 文本聚类:使用聚类...
  • 以”二进制 追加”模式打开 “ab+” 以”二进制 读写”模式打开 “w” 以”写”的方式打开 “w+” 以“读写”模式打开 “wb” 以“二进制 写”模式打开 “wb+” 以“二进制 读写”模式打开 “r+” 以”读写”模式...
  • python读取、写入txt文本内容

    万次阅读 多人点赞 2019-08-22 21:54:28
    读取txt文本 python常用的读取文件函数有三种read()、readline()、readlines() 以读取上述txt为例,看一下三者的区别 read() 一次性读全部内容 一次性读取文本中全部的内容,以字符串的形式返回结果 with open...
  • windows 下的 Python 对文本文件(text files)和二进制文件(binary files)的处理方式不同, 2. Python 2 vs Python 3 对于 Python 3 环境: r :Python 将会按照编码格式进行解析, read() 操作...
  • Python文本读写及编码检测

    千次阅读 2019-07-28 21:40:08
    (因为CSDN编辑器的原因,表格后面有一串空白,但是在编辑预览里是正常的) 目录 1.文本读写 2.路径及文件名操作 3.编码判断 1.文本读写 ...Python的文件操作接口...#文本模式可以不加t,二进制读写需要加b #wi...
  • 微信小程序富文本解析

    万次阅读 2019-09-10 13:43:45
    微信小程序富文本解析 *人狠话不多,直接代码搞起* html代码 <p>这是一段文字</p> <p><strong>这是加粗的字</strong></p> <p><em>这是斜体字</em></p>...
  • python 中文文本分类

    万次阅读 多人点赞 2017-02-06 11:31:21
    with open(savepath, "wb") as fp: fp.write(content) ''' 上面两行是python2.6以上版本增加的语法,省略了繁琐的文件close和try操作 2.5版本需要from __future__ import with_statement 新手可以参考这个链接...
  • 我本次对4类文本进行分类((所有截图代码和数据集最后附带免费下载地址)) 主要步骤: 1.各种读文件,写文件 2.使用jieba分词将中文文本切割 3.对处理之后的文本开始用TF-IDF算法进行单词权值的计算 4....
  • w和wb的问题

    2020-04-05 02:54:03
    文本文件也是二进制文件,是文本编码的二进制文件,文本文件对一些不可见字符(大多是控制符,如换行,制表符tab,空格,文件结束标志等)进行了处理,增加可读性。 首先,先理解换行符’\n’跟回车符’\r’的概念。...
  • fopen 参数的意义 w wb r rb

    千次阅读 2018-07-13 13:05:00
    函数fopen是一个标准c函数,其功能是打开一个文件,之后便可以进行读或写的操作....对于模式参数的”w”和”wb”,”r”和”rb”,我起初并不是很理解,按照课本上的说法,”w”是以文本的形式进行写入...
  • python保存文本文件的方法: 使用python内置的open()类可以打开文本文件,向文件里面写入数据可以用write()函数,写完之后,使用close...可修改该模式('w+','w','wb'等) f.write("hello,sha") #将字符串写入文件中 f.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,832
精华内容 7,132
关键字:

wb文本模式