拜赐。。
时间: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("啊");
}
这是本人写的一个??但显示的汉字和读入的汉字不一样??请各位大侠指教
如何读取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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28