精华内容
下载资源
问答
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读UCDOS...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 UCDOS 16点字库文件的示例。

    在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。汉字点阵数据在字库中的偏移量为 ((区码-A1H)*94 + (区内编码-A1H))*32。

    本程序为一个简单的例子,要显示的汉字在变量 DISP_DATA 中,且没有考虑汉字、英文混用的情况。

    源程序:

    ; Write in May 22,1996

    ;            By LuoYunBin ----- http://asm.yeah.net

    .286

    LINE_CHAREQU210;在屏幕上第几行显示

    COL_CHAREQU230;在屏幕上第几列显示

    COLOR_CHAREQU0EH;显示颜色

    CHARSEQU(offset disp_data_end-offset disp_data)/2

    CODESEGMENT

    ASSUME CS:CODE,DS:CODE

    ORG 100H

    START:

    jmpinstall

    CC_FILEDB'C:\UCDOS\HZK16',0;字库文件名,用 UCDOS 的16点阵汉字库

    HANDLEDW?;file handle

    DISP_DATADB'罗云彬';要显示的汉字

    DISP_DATA_ENDEQUTHIS BYTE

    D_OPEN_ERRORDB'File C:\UCDOS\HZK16 not found !',0dh,0ah,24h

    install:

    movax,3d00h;打开汉字库

    movdx,offset cc_file

    int21h

    jnbopen_ok

    movah,9

    movdx,offset d_open_error

    int21h

    int20h

    open_ok:

    movhandle,ax

    movsi,offset disp_data

    movdi,offset zi_buffer

    movcx,chars

    cld

    ins2:

    lodsb

    movah,al

    lodsb

    callget_dots;读出汉字点针

    loopins2

    calldisp_cc;显示到屏幕

    int20h

    GET_DOTSPROC

    pusha

    subax,0a1a1h;汉字的内码从 A1区开始

    cwd

    movdl,al;所以绝对开始区是内码-A1

    moval,ah;点阵在字库中的位置为

    cbw

    movbl,94;((汉字码1-A1)* 94 + 汉字码2 - A1)* 32

    mulbl

    addax,dx

    movbx,32

    mulbx

    movcx,dx

    movdx,ax

    movax,4200h;移动读写指针到点阵数据位置

    movbx,handle

    int21h

    movah,3fh

    movcx,32

    movdx,di

    int21h

    popa

    adddi,32

    ret

    GET_DOTSENDP

    DISP_CCPROC

    movax,12h;640*480 mode

    int10h;设置640*480/16色显示模式

    movcx,chars

    movsi,offset zi_buffer

    movbx,col_char-20;BX = column

    dh_lop0:

    addbx,20;every char column+20

    pushcx

    movcx,16;l6 lines/char

    movdx,line_char;DX = start line

    dh_lop1:

    pushbx

    pushcx

    lodsb;16 dots/line

    movah,al

    lodsb

    movcx,16

    dh_lop2:

    shlax,1

    pushax

    pushbx

    pushcx

    jcdb_color

    xoral,al;back color is 0

    jmpshort db_draw

    db_color:

    moval,color_char

    db_draw:

    movah,0ch

    movcx,bx

    xorbh,bh

    int10h

    popcx

    popbx

    popax

    incbx;inc column

    loopdh_lop2

    incdx;next line

    popcx

    popbx

    loopdh_lop1

    popcx

    loopdh_lop0

    xorah,ah

    int16h

    movax,3

    int10h

    ret

    DISP_CCENDP

    ZI_BUFFEREQUTHIS BYTE

    CODEENDS

    END START

    展开全文
  • 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存储,只不过对于数字,既可以认为是一个数字,也可以认为是一个字符,这就是产生第二个区别的原因

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读UCDOS...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 UCDOS 16点字库文件的示例。

    在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。汉字点阵数据在字库中的偏移量为 ((区码-A1H)*94 + (区内编码-A1H))*32。

    本程序为一个简单的例子,要显示的汉字在变量 DISP_DATA 中,且没有考虑汉字、英文混用的情况。

    源程序:

    ; Write in May 22,1996

    ;            By LuoYunBin ----- http://asm.yeah.net

    .286

    LINE_CHAREQU210;在屏幕上第几行显示

    COL_CHAREQU230;在屏幕上第几列显示

    COLOR_CHAREQU0EH;显示颜色

    CHARSEQU(offset disp_data_end-offset disp_data)/2

    CODESEGMENT

    ASSUME CS:CODE,DS:CODE

    ORG 100H

    START:

    jmpinstall

    CC_FILEDB'C:\UCDOS\HZK16',0;字库文件名,用 UCDOS 的16点阵汉字库

    HANDLEDW?;file handle

    DISP_DATADB'罗云彬';要显示的汉字

    DISP_DATA_ENDEQUTHIS BYTE

    D_OPEN_ERRORDB'File C:\UCDOS\HZK16 not found !',0dh,0ah,24h

    install:

    movax,3d00h;打开汉字库

    movdx,offset cc_file

    int21h

    jnbopen_ok

    movah,9

    movdx,offset d_open_error

    int21h

    int20h

    open_ok:

    movhandle,ax

    movsi,offset disp_data

    movdi,offset zi_buffer

    movcx,chars

    cld

    ins2:

    lodsb

    movah,al

    lodsb

    callget_dots;读出汉字点针

    loopins2

    calldisp_cc;显示到屏幕

    int20h

    GET_DOTSPROC

    pusha

    subax,0a1a1h;汉字的内码从 A1区开始

    cwd

    movdl,al;所以绝对开始区是内码-A1

    moval,ah;点阵在字库中的位置为

    cbw

    movbl,94;((汉字码1-A1)* 94 + 汉字码2 - A1)* 32

    mulbl

    addax,dx

    movbx,32

    mulbx

    movcx,dx

    movdx,ax

    movax,4200h;移动读写指针到点阵数据位置

    movbx,handle

    int21h

    movah,3fh

    movcx,32

    movdx,di

    int21h

    popa

    adddi,32

    ret

    GET_DOTSENDP

    DISP_CCPROC

    movax,12h;640*480 mode

    int10h;设置640*480/16色显示模式

    movcx,chars

    movsi,offset zi_buffer

    movbx,col_char-20;BX = column

    dh_lop0:

    addbx,20;every char column+20

    pushcx

    movcx,16;l6 lines/char

    movdx,line_char;DX = start line

    dh_lop1:

    pushbx

    pushcx

    lodsb;16 dots/line

    movah,al

    lodsb

    movcx,16

    dh_lop2:

    shlax,1

    pushax

    pushbx

    pushcx

    jcdb_color

    xoral,al;back color is 0

    jmpshort db_draw

    db_color:

    moval,color_char

    db_draw:

    movah,0ch

    movcx,bx

    xorbh,bh

    int10h

    popcx

    popbx

    popax

    incbx;inc column

    loopdh_lop2

    incdx;next line

    popcx

    popbx

    loopdh_lop1

    popcx

    loopdh_lop0

    xorah,ah

    int16h

    movax,3

    int10h

    ret

    DISP_CCENDP

    ZI_BUFFEREQUTHIS BYTE

    CODEENDS

    END START

    展开全文
  • C语言读取中文汉字

    万次阅读 多人点赞 2018-08-05 11:48:33
    一般的来说,一个汉字占两个字节,数字和字母都占一个字节,但是有一点是,汉字的两个字节如果转换成整型都是负数,也就是说,用按字节读取文件,然后判断字节的正负,如果一个字节对应的整型是负的,那么一连读取两...

    一般的来说,一个汉字占两个字节,数字和字母都占一个字节,但是有一点是,汉字的两个字节如果转换成整型都是负数,也就是说,用按字节读取文件,然后判断字节的正负,如果一个字节对应的整型是负的,那么一连读取两个字符,如果这个字节是正的,那么就读取这一个字节就好了

     

     

     

     

    展开全文
  • C语言课程设计要求使用文件,然后在我进行文件操作的时候发生了一点小小的意外,读写文件中汉字显示的居然是乱码。 经过我的一番查找之后发现居然是txt编码方式的问题。 为使计算机支持更多语言,通常使用 0x80~0...
  • C语言中文件读取和写入

    千次阅读 2018-07-17 09:02:23
    注意: 1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2、电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式) 在C语言中文件 //获取文件指针FILE *pFi
  • C语言中文件读取处理

    2021-06-25 16:46:04
    字母转换并统计行数:读取一个指定的文本文件,显示在屏幕章,如果有大写字母,则改写成小写字母再输出,并根据回车符统计行数。试编写相应程序。
  • 在项目里面经常会用到读取一些配置信息,而C语言有没有直接的读取配置文件的函数,这里贴出我写的代码,有兴趣的看一下,也希望能有好的建议。考虑到代码需要在多个项目里面运行,会对配置文件有不同的需求,这里把...
  • C语言读取CSV文件

    2016-04-08 20:33:47
    参考大神文档,在这个基础上修改处的可以直接调用读取CSV文件的接口;很方便可以直接调用读取;函数都封装的很好,也有很详细的注释
  • C语言读取文件目录树

    千次阅读 2014-05-18 22:50:16
    这段时间笔者在准备一个比赛,需要用C/C++实现一个将磁盘的文件目录树读入到内存(其实就是将磁盘文件目录树读入到一个树形结构),笔者是搞JAVA的,这次要用C实现这样一个功能,着实让笔者头痛了很久,不过...
  • C语言文件读写

    2020-12-24 14:55:51
    文章目录前言一、文件的打开(fopen函数)二、文件关闭(fclose函数)三、C中文本文件和二进制文件的区别四、C语言以字符形式读写文件五、C语言以字符串形式读写文件六、C语言中的文件复制操作七、C语言中文件常用的...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读UCDOS...
  • c语言读取文件数据时最后出现一串乱码怎么办![图片](https://img-ask.csdn.net/upload/201603/11/1457701905_263874.jpg)![图片](https://img-ask.csdn.net/upload/201603/11/1457701930_642613.jpg)
  • C语言读取excel文件

    千次阅读 2020-04-22 14:36:21
    将Excel文件另存为*.csv文件(是和txt一样,以二进制文本形式存储,它是以都逗号分隔符做个单元格内容的划分),这里要特别注意在另存为时,会有两个关于csv的选项,如果需要在C语言中读取中文,需要选择 CSV(逗号...
  • c语言中文件读写

    2018-03-04 11:32:01
    https://www.cnblogs.com/wgang171412/p/5089040.html
  • C语言读写中文时出现乱码的解决

    千次阅读 2020-12-07 21:14:17
    C语言读取文件中文乱码处理 之前一直以为读取中文时变成乱码时因为读取文件时字符串长度不足,或者是文件中中文格式不对,上网百度以后发现是TXT格式文件在创建时默认编码为UTF-8,这导致在读取文件时编码格式不...
  • 在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就...
  • 我需要在一个TXT文件里找到其中特定的字母和汉字 但我写的代码只能找到字母,例如下面代码是找字母A,汉字不知道怎么样去匹配它,希望大家能帮帮我修改一下,感激不尽 [img=...
  • C语言读取汉字文件,找出汉字信息的示例,汉字文件后缀为.FON
  • 关于什么是文件,大家应该都不陌生,如在windows大家经常看到以.txt结尾的文本文件,以.c结尾的c源文件。在介绍文件操作之前,我会讲解几个与文件相关的术语。@磁盘文件:顾名思义,存储在磁盘的文件。@二进制文件...
  • 了解了在C语言中如何打开文件后就可以正式进行文件读写操作了,文件根据类型又分为ASCII文件和二进制文件,我们首先从简单的入手,先看看ASCII文件(文本文件)是如何读取的。ASCII文件(文本文件)保存的是一个字符...
  • c语言读写配置文件

    千次阅读 2013-04-07 12:06:55
    在项目里面经常会用到读取一些配置信息,而C语言有没有直接的读取配置文件的函数,这里贴出我写的代码,有兴趣的看一下,也希望能有好的建议。  考虑到代码需要在多个项目里面运行,会对配置文件有不同的需求,...
  • 二进制文件(映像文件):在内存以二进制形式存取。2.文本文件(ascii文件):以ascii码形式存取的文件。通俗的讲,在Mac下,你把一个文件丢进记事本里面,如果打开是乱码就是二进制文件。二.其次是文件类型指针:简单...
  • C语言读写xml文件

    千次阅读 2019-03-15 15:11:57
    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...
  • 帮忙看下 读取出来的文字全部乱码 数字正常define _CRT_SECURE_NO_WARNINGSincludeincludevoid readFile(char*** p, int* line){int totallines = 0;char buf[1024] = { 0 };FILE* fp = fopen("C:\\Users\\Desktop\\...
  • C语言文件输入输出读取中文TXT文件出现乱码

    万次阅读 多人点赞 2018-03-17 19:18:37
    今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下//倒序显示文件的内容 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define CNTL_Z '\032' //文件...
  • c语言文件读写操作的详细使用方法C文件操作遇到的状况1.将一个文件读到另一个文件,用“(ch = getc(fp)) != EOF”来判断文件是否结束,如果文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样;但是如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,503
精华内容 10,601
关键字:

c语言读取文件中的中文

c语言 订阅