+ -
当前位置:首页 → 问答吧 → 拜赐。。

拜赐。。

时间:2010-09-16

来源:互联网

本帖最后由 lkkkun 于 2010-09-16 11:36 编辑

如何读取hzk48S中的汉字字模,以及如果用点阵的方式来显示?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/***************************************************************
    * 函数名称: hanzi16(char *pstr )
    * 函数功能: 将中文转换成16*16的点阵文字
    * 输入参数: *pstr要转换文字的地址
    * 输出结果: 文字的点阵形式
    * 返回结果:
    * 时间:    2010-9-10
***************************************************************/
void hanzi48( char *pstr)
{
        FILE *fp;
        FILE * fptr ;
        char cbuffer[288];   /*32字节的字模缓冲区 */
        int i ,j ,k;
        unsigned char ucqh , ucwh ;
        unsigned long dlocation ;
        char c= '\n';
       
        if ((fp = fopen("HZK48S","rb")) == NULL)
        {
                printf("Can't open hzk16!!!");
                exit(0);
        }
        if((fptr = fopen("test.txt","wb+"))==NULL)
        {
                        printf("Count open file .\n");
                        exit(1);
        }
        
        while ( *pstr )
        {        char str[48][48];
                char e;
                for( i = 0 ; i < 48 ; i++){
                for( j= 0;j<48;j++)
                str[j]=' ';
                }
               
                ucqh = *pstr - 0xa0-16 ;           //计算区号
                ucwh = *(pstr+1)-0xa0 ;         //计算位号
                printf("%d",ucqh);
                printf("%d\n",ucwh);
                dlocation = ( 94*(ucqh -16)+(ucwh -1 ))*288;
                fseek(fp , dlocation ,SEEK_SET );
                fread(cbuffer ,sizeof(char) ,288 ,fp );
                for(i=0;i<288;i++)
               
                {
                printf("0x%x ",cbuffer);
                if((i+1)%8==0)printf("\n");
               
                }
               
               
                for( i = 0 ; i < 48 ; i++)
                {
                for( j = 0 ; j < 6 ; j++)
                {
                //e = cbuffer[i*6+j];
                for( k = 0 ; k < 8 ; k++)
                if(((cbuffer[i*6+j]>>(7-k))&0x1)!= NULL)
                //if(e&(0x80>>k))
                {
                putchar('.');
                str[(j*8)+k]='.';
                //str[j*8+k]
                }
                else
                {
                putchar(' ');
                str[(j*8)+k]=' ';
                }
                }
                printf("\n");
                }
                printf("...........");
                pstr += 2;

        }
                fclose(fptr);
                fclose(fp);
                }

               
               
                //main
                void main( void )
                {      
                       
                        hanzi48("啊");
               
                }

这是本人写的一个??但显示的汉字和读入的汉字不一样??请各位大侠指教

作者: lkkkun   发布时间: 2010-09-16

哥以前也玩过这东西。

作者: donglongchao   发布时间: 2010-09-16