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

    2021-06-25 16:46:04
    字母转换并统计行数:读取一个指定的文本文件,显示在屏幕章,如果有大写字母,则改写成小写字母再输出,并根据回车符统计行数。试编写相应程序。
  • c语言txt文件读取代码

    2015-11-25 00:52:40
    如何用C实现txt不间断读取 直到文档结束
  • 在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就...
  • C语言文件读写

    2020-12-24 14:55:51
    文章目录前言一、文件的打开(fopen函数)二、文件关闭(fclose函数)三、C中文文件和二进制文件的区别四、C语言以字符形式读写文件五、C语言以字符串形式读写文件六、C语言中的文件复制操作七、C语言文件常用的...


    前言

    提示:在C语言中,文件操作都是由库函数来完成的,下面总结下文件的相关操作。

    一、文件的打开(fopen函数)

    fopen()函数用来打开一个文件,它的格式为:

    FILE *fopen(char *filename,char *type);
    

    filename为文件名(包括文件路径),type为打开方式,它们都是字符串。fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个FILE类型的结构体变量中,然后将该变量的地址返回。如果接收 fopen() 的返回值,就需要定义一个 FILE 类型的指针。例如:

    FILE *fp = ("demo.txt", "r");
    
    打开方式(type)如表格所示:
    
    类型详解
    “r”(只读)为输入打开一个文本文件
    “w”(只写)为输出打开一个文本文件
    “a”(追加)为追加打开一个文本文件
    “rb”(只读)为输入打开一个二进制文件
    “wb”(只写)为输出打开一个二进制文件
    “ab”(追加)为追加打开一个二进制文件
    “r+”(读写)为读/写打开一个文本文件
    “w+”(读写)为读/写创建一个文本文件
    “a+”(读写)为读/写打开一个文本文件
    “rb+”(读写)为读/写打开一个二进制文件
    “ wb+”(读写)为读/写创建一个二进制文件
    “ab+”(读写)为读/写打开一个二进制文件

    在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。
    代码如下(示例):

    FILE *fp = NULL;
    if(fp = fopen("D:\\test.txt","rb") == NULL) //判断打开的文件是否为空,如果为空,则提示错误
    {
    	printf("open file is error D:\\test.txt file!\n");
    	exit(1);
    }
    

    二、文件关闭(fclose函数)

    代码如下(示例):

    if(fclose(fp) == 0)     //文件关闭,如果成功则返回值为0,返回值为非0表示关闭错误
    {
        printf("close fp success\n");
    }
    else
    {
        printf("close fp fail\n");
    }
    

    三、C中文本文件和二进制文件的区别

    二进制是按照二进制编码方式存放在文件中的,虽然可以在屏幕上显示,但是不能读懂,文本文件是ASC码,可以在屏幕上按字符显示。

    四、C语言以字符形式读写文件

    以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。主要使用两个函数:fgetc()和fputc()。fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。它的原型为:

    int fgetc (FILE *fp); //fp 为文件指针。
    

    fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF。EOF 是 end of file 的缩写,表示文件末尾,是在 stdio.h 中定义的宏,它的值是一个负数,往往是 -1。EOF 不绝对是 -1,也可以是其他负数,这要看编译器的实现。
    代码如下(示例):

    char ch;
    while( (ch=fgetc(fp)) != EOF )  //每次读取一个字节,直到读取完毕
    putchar(ch);                    //输出字符ch的值
    fputc('a', fp);                 //想文本中输入字符a
    

    EOF 本来表示文件末尾,意味着读取结束,但是很多函数在读取出错时也返回 EOF,那么当返回EOF时,到底是文件读取完毕了还是读取出错了?我们可以借助 stdio.h 中的两个函数来判断,分别是 feof() 和 ferror()。

    // feof() 函数用来判断文件内部指针是否指向了文件末尾,它的原型是:
    int feof ( FILE * fp ); //当指向文件末尾时返回非零值,否则返回零值。
    // ferror() 函数用来判断文件操作是否出错,它的原型是:
    int ferror ( FILE *fp ); //出错时返回非零值,否则返回零值。
    

    五、C语言以字符串形式读写文件

    fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的原型为:

    char *fgets ( char *str, int n, FILE *fp ); //str 为字符数组,n 为要读取的字符数目,fp 为文件指针。
    

    返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL;如果开始读取时文件内部指针已经指向了文件末尾,那么将读取不到任何字符,也返回 NULL。读取到的字符串会在末尾自动添加 ‘\0’,n 个字符也包括 ‘\0’。也就是说,实际只读取到了 n-1 个字符,如果希望读取 100 个字符,n 的值应该为 101。
    代码如下(示例):

    char str[N];
    while(fgets(str, N, fp) !=NULL)
    {
    	printf("str = %s",str);
    }
    

    六、C语言中的文件复制操作

    #define N 101
    FILE *wfp = NULL;
    FILE *rfp = NULL;
    if((wfp = fopen("D:\\test1.jpg","wb")) == NULL) //判断打开的文件是否为空
    {
    	printf("open file is error D:\\test.txt file!");
    	exit(1);
    }
    if((rfp = fopen("D:\\1.jpg","rb")) == NULL) //判断打开的文件是否为空
    {
    	printf("open file is error D:\\test.txt file!");
    	exit(1);
    }
    char buf[N]; //定义一个buf,作为缓存区
    int len = 0; //读取的长度
    while((len = fread(buf,sizeof(char),N,rfp))!=0)
    {
    	fwrite(buf,sizeof(char),len,wfp);
    }
    fclose(wfp);
    fclose(rfp);
    

    七、C语言中文件常用的函数

    fseek(fp,0,SEEK_END);   //SEEK_END文件末尾,0偏移量.
    fseek(fp,0,SEEK_SET);   //SEEK_END文件头,0偏移量.
    long filesize = ftell(fp); //返回当前的文件指针,相对于文件开头的位移量.
    int ret = fprintf(fp,"%s","测试");//将文件格式化方式写入到文件中,成功返回字符串长度,错误返回负数.
    int ret = feof(fp);//判断是否到文件尾部,如果是返回一个正数,不是返回0.
    int ret = fflush(fp); //刷新文件缓存区,如果返回0,则表示成功,EOF表示失败,错误在error中.
    rewind(fp);//设置文件流位置为开头,和fseek()一样.
    long int ftell(FILE *stream);返回文件当前的位置
    

    八 、文件加解密

    通过字符串++和减减实现字符的加密和解密

    void encrypt(char *s)   //文件加密
    {
        while(*s)
        {
            (*s)++;
            s++;
        }
    }
    void disencrypt(char *s)    //文件解密
    {
        while(*s)
        {
            (*s)--;
            s++;
        }
    }
    

    九、文件的重命名和删除

    remove("E:\\Study\\program\\QT\\file\\a.txt");//删除文件a.txt
    rename("E:\\Study\\program\\QT\\file\\b.txt","E:\\Study\\program\\QT\\file\\a.txt");//重命名b.txt为a.txt
    

    总结

    1、读取文件文本和写入文件文本应该分开封装,如果文件打开后,写入文件,然后在读取文件,很容易出现问题(如果写入文件长度为4,但是读取长度为8,则文件后面会追加4个空格)。 2、在windows下,文本文件打开文件\n换行,会自动在前面加入\r,但是二进制打开不会。 3、在使用fread读取文件,并且显示时,一次读取的大小要小于buf的定义的大小,不然,会出现越界,不能自动追加'\0'结尾,但是如果是文件复制,则可以。
    展开全文
  • c语言文件读写

    2018-03-04 11:32:01
    https://www.cnblogs.com/wgang171412/p/5089040.html
    https://www.cnblogs.com/wgang171412/p/5089040.html
    展开全文
  • 了解了在C语言中如何打开文件后就可以正式进行文件读写操作了,文件根据类型又分为ASCII文件和二进制文件,我们首先简单的入手,先看看ASCII文件(文本文件)是如何读取的。ASCII文件(文本文件)中保存的是一个字符...

    了解了在C语言中如何打开文件后就可以正式进行文件的读写操作了,文件根据类型又分为ASCII文件和二进制文件,我们首先从简单的入手,先看看ASCII文件(文本文件)是如何读取的。

    ASCII文件(文本文件)中保存的是一个字符序列,只要按照顺序一个个的读出直到文件结尾,即可实现对整个文件的读取了

    ,写入文件也是一样的道理。

    fputc函数

    fputc函数的作用就是将一个字符写入到文件中,其调用形式为:

    fputc(ch,pFile);

    其中ch就是要写入的字符,pFile是指向FILE结构的指针,通过fopen函数打开文件即可获取pFile。

    写入文件有可能会失败,但怎么才能知道是否正确写入到文件了呢?这时候就需要看fputc函数的返回值了,fputc函数如果成功的将字符写入到文件了,则其返回值就是写入的那个字符,如果失败,则返回EOF(End Of File的意思)。EOF是一个符号常量,在stdio.h中EOF被定义为-1,因此见到EOF把他当做-1就是了。

    fgetc函数

    知道fputc是做什么的了,fgetc基本也就知道了,这个就是从文件中读入一个字符的函数,其调用形式为:

    ch=fgetc(pFile);

    参数pFile和fputc函数的参数一样,只不过少了一个参数ch,跑到返回值这里了。当fgetc成功从文件中读入字符后,ch就是读取到的字符,如果读取失败,则ch=EOF。

    综上可见,EOF在文件的读写操作中扮演中重要的角色,当读取的值为EOF的时候,程序就知道文件已经读完了。

    fputc函数和fgetc函数实例演示

    说一大堆不如直接来段程序记忆深刻,下面知蚁就做一个示例程序,读取一个文本文件的数据,然后写入到另外一个文本文件中去,我们先准备一个有内容“I like www.letuknowit.com”的文本文件。

    C语言: 知蚁博客

    #include “stdio.h”

    void main()

    {

    char ch;

    FILE *pSrc,*pDes;

    pSrc = fopen(“srcfile.txt”,“r”);    //打开文件读取数据

    pDes = fopen(“desfile.txt”,“w”);    //打开文件写入数据

    if((NULL==pSrc) || (NULL==pDes))

    {

    printf(“Open file failed,can’t go on\n“);

    return;

    }

    ch=fgetc(pSrc);    //读取第一个字符

    while(EOF != ch)

    {

    fputc(ch,pDes);    //写入字符

    ch=fgetc(pSrc);    //读取下一个字符

    }

    printf(“Successed copy srcfile to desfile\n“);

    fclose(pSrc); //别忘了关闭

    fclose(pDes); //同上

    }

    运行程序之前,需要在程序运行目录下新建一个文本文件,内容随便写。值得一提的是,fputc函数和fgetc函数支持中文。

    原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/96

    展开全文
  • printf("文件打开失败!\n"); sleep(3); exit(1); } int length = 0; fseek(fp, 0L, SEEK_END); length = ftell(fp); fseek(fp, 0L, SEEK_SET); char* str = (char*)calloc(length + 1, ...
  • 关于C语言 从文件读出的汉字为乱码

    千次阅读 2019-12-31 08:48:49
    再确定代码无误的情况下 这篇文章说的很清楚, 是因为编码的方式
  • v. 读取数据文件,并把每一条记录通过数组下标法或指针法保存到结构体数组pStudents中; vi. 关闭文件; vii. 返回学生人数。 c) 数据文件格式说明: 一行一条学生信息的记录,不同属性用空格隔开,输入数据中无总...
  • C语言文件读写函数总结

    千次阅读 多人点赞 2018-04-30 23:51:59
    2、从文件读取字符 fgetc 二、字符串的读写 1、字符串写入文件函数 fputs 2、从文件读取字符 fgets 三、块数据读写 1、向文件中写入块数据fwrite 2、从文件读取块数据fread 四、格式化读写 1、格式化...
  • c语言文件读写操作的详细使用方法C文件操作遇到的状况1.将一个文件读到另一个文件,用“(ch = getc(fp)) != EOF”来判断文件是否结束,如果文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样;但是如果...
  • 这是一个读取写入txt文件的一个代码,我读取汉字之后fprintf到txt文件里是正常的,但是用printf输出时就变成了乱码。 求大神帮助!!!! 以下是代码和运行后样子。 07/23/1595513451_164747.png) #include ...
  • C语言文件读取和写入

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

    2017-12-01 14:40:48
    //获取文件的指针char *pBuf; //定义文件指针fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度int len=ftell(pFile); //获取文件长度pBuf=new char[len+1]; //定义数组长度rewind(pFile); //把...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读UCDOS...
  • C语言文件读写操作详解

    千次阅读 2016-03-24 14:28:35
    C语言/C++中文帮助文档免积分下载(点击跳转) 当文件按指定的工作方式打开以后,就可以执行对文件的读和写。下面按文件的性质分类进行操作。针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写...
  • 按照要求写了个读文件的程序,但是出了一点我不能理解的bug 希望老师指点指点 程序: ``` int main () { char comet[6]; char group[6]; FILE *input; input=fopen ("ride.in", "r"); ...
  • 问题:输出中文字符乱码 今天txt读中文到字符串数组里输出发现中文是乱码,原本以为是读入方式的问题,结果是文件本身的问题,令人抓狂!!!!!!
  • C语言以数据块的形式读写文件实例代码大家知道C语言怎么以数据块的形式读写文件吗?下面小编为大家整理了C语言以数据块的形式读写文件实例代码,希望能帮到大家!fgets() 有局限性,每次最多只能从文件读取一行...
  • C语言 从文件导入信息建立一个链表

    千次阅读 多人点赞 2019-04-13 00:22:15
    从文件导入数据建立一个链表,实现学生信息的增,删,查,取功能 链表的建立分为头插和尾插,头插数据读取顺序与插入顺序相反。尾插读取顺序与插入顺序相同。 具体代码如下: 尾插法: #include<stdio.h> #...
  • 在项目里面经常会用到读取一些配置信息,而C语言有没有直接的读取配置文件的函数,这里贴出我写的代码,有兴趣的看一下,也希望能有好的建议。考虑到代码需要在多个项目里面运行,会对配置文件有不同的需求,这里把...
  • C语言文件读取和写入

    千次阅读 2019-11-09 16:32:28
    1、C语言中写文件 //获取文件指针 FILE *pFile = fopen("1.txt", //打开文件的名称 "w"); // 文件打开方式 如果原来有内容也会销毁 //向文件写数据 fwrite ("hello", //要输入的文字 1,//文字每一项的大小 以为...
  • C语言读取汉字文件,找出汉字信息的示例,汉字文件后缀为.FON
  • C语言读取CSV文件

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

    2019-08-14 18:06:30
    1.文件的打开操作:fopen打开一个文件 FILE *fopen(char *pname,char *mode) 功能说明  按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理...
  • C语言文件输入输出读取中文TXT文件出现乱码

    万次阅读 多人点赞 2018-03-17 19:18:37
    今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下//倒序显示文件的内容 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define CNTL_Z '\032' //文件...
  • C语言读取中文汉字

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

空空如也

空空如也

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

c语言从文件读取汉字

c语言 订阅