HZK16的GB2312-80支持的汉字有6763个

参谋资料:

评释:1、区码减1是因为数组是以0为始发而区号位号是以1为始发的

HZK16字Curry的16×16汉字一共须求257个点来体现,也正是说要求三拾个字节技术落得展现一个普通汉字的指标。

区码:区号(汉字的首先个字节)-0xa0
(因为汉字编码是从0xa0区起始的,所以文件最前边正是从0xa0区起始,要算出相对区码卡塔尔

运作结果,大家在euc.txt中参与一些中夏族民共和国字。

offset=(94*(区码-1)+(位码-1))*32

hzk16的牵线以至简单的使用方法

代码如下:

前面谈起贰个中中原人民共和国字占多个字节,这两在那之中前一个字节为该汉字的区号,后二个字节为该字的位号。个中,各个区记录93个汉字,位号为该字在该区中的地点。所以要找到“小编”在hzk16库中的地点就务须拿到它的区码和位码。(为了差距使用了区码和区号,其实是多少个事物,别被自个儿错误的指导了)

贯彻思路:

  1. 刺探HZK编码,驾驭一下合乎GB2312标准的中文点阵字库文件HZK16;
  2. 下载汉语GB2312的二进制点阵文件;
  3. 将HZK16.fnt文书放入nihongo文件夹中;
  4. 修改主makefile文件和app_make.txt文件,将原先装载nihongo.fnt的言语替换来装载HZK16.fnt就能够;
  5. 修改bootpack.c文件,将事前分配的装载葡萄牙语字体的内部存款和储蓄器扩张,载入字库的文书名;
  6. 在haribote/graphic.c中增加支持汉字的代码,增添三个函数用于突显汉字;
  7. 修改putfonts8_asc函数里if (task->langmode == 3)语句块;
  8. 测量检验程序。
  9. 潜心:希伯来语的编码是分为左半某些和右半部分,而笔者辈接收的HZK16是分为上半部分和下半部分的。

要求:原操作系统代码里只是支撑了波兰语显示,供给做的是得以完成对那一个种类的方块字全角补助。

3、最终乘以32是因为汉字库文应从该岗位起的32字节新闻记录该字的字样音讯(后边提到五个汉字要有三拾一个字节彰显)

1. 30天操作系统扶助普通话。

这里其余的地点相比较弄,第5步将大小更改一下,笔者的是nihongo = (unsigned
char *) memman_alloc_4k(memman, 55*94*32);

诸如此比大家就足以拿走汉字在HZK16中的相对偏移地方:

 有了舞狮地址就足以从HZK16中读取汉字编码了

void putfont32(char *vram, int xsize, int x, int y, char c, char *font1, char *font2)
{
    int i,k,j,f;
    char *p, d ;
    j=0;
    p=vram+(y+j)*xsize+x;
    j++;
    //上半部分
    for(i=0;i<16;i++)
    {
        for(k=0;k<8;k++)
        {
            if(font1[i]&(0x80>>k))
            {
                p[k+(i%2)*8]=c;
            }
        }
        if(i%2==0){
            for(k=0;k<4;k++){
                f=p[k];
                p[k]=p[7-k];
                p[7-k]=f;
            }
        }else{
            for(k=0;k<4;k++){
                f=p[k+8];
                p[k+8]=p[15-k];
                p[15-k]=f;
            }
        }
       /* for(k=0;k<8/2;k++)
        {
            f=p[k+(i%2)*8];
            p[k+(i%2)*8]=p[8-1-k+(i%2)*8];
            p[8-1-k+(i%2)*8]=f;
        }*/
        if(i%2)
        {
            p=vram+(y+j)*xsize+x;
            j++;
        }
    }
    //下半部分
    for(i=0;i<16;i++)
    {
        for(k=0;k<8;k++)
        {
            if(font2[i]&(0x80>>k))
            {
                p[k+(i%2)*8]=c;
            }
        }
        if(i%2==0){
            for(k=0;k<4;k++){
                f=p[k];
                p[k]=p[7-k];
                p[7-k]=f;
            }
        }else{
            for(k=0;k<4;k++){
                f=p[k+8];
                p[k+8]=p[15-k];
                p[15-k]=f;
            }
        }
        /*for(k=0;k<8/2;k++)
        {
            f=p[k+(i%2)*8];
            p[k+(i%2)*8]=p[8-1-k+(i%2)*8];
            p[8-1-k+(i%2)*8]=f;
        }*/
        if(i%2)
        {
            p=vram+(y+j)*xsize+x;
            j++;
        }
    }
    return;
}

第6步,要小心,HZK16是前后两局部,不相同于德文的左右两片段的布局。

图片 1

 

咱俩领会叁个GB2312汉字是由五个字节编码的,范围为A1A1~FEFE。A1-A9为符号区,B0到F7为汉字区。每三个区有玖拾叁个字符(注意:那只是编码的批准范围,不自然都有字型对应,例如符号区就有不菲编码空白区域)。下边以汉字“笔者”为例,介绍怎样在HZK16文书中找到它对应的35个字节的字样数据。

2、(94*(区号-1卡塔尔+位号-1卡塔尔(قطر‎是三个汉字字模占用的字节数

HZK16字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有67六17个,符号683个。在那之中一级汉字有37伍11个,按声序排列,二级汉字有3008个,按偏旁部首排列。大家在有个别应用项合根本用不到如此多汉字字模,所以在选择时就足以只领到部分字体作为己用。

位码:位号(汉字的第3个字节)-0xa0

This entry was posted in 操作系统 and tagged . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注