怎么在TC中把汉字库调入进来

liyhuhuanini 2011-09-08 02:46:37
怎么在TC中把汉字库调入进来,在下在网上下了HZK16的文件,并在程序中设好路径,程序编译也没问题,可就是打不开汉字库。请各位大神赐教。。。。。。。。。。。
...全文
72 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liyhuhuanini 的回复:]

应该没错,我是把EXE文件和汉字库在同一个目录下。可是就是说打不开汉字库文件。
[/Quote]
还是路径问题,工作目录不知道默认设置到哪里去了,你用.\\或者指定绝对路径试试看
liyhuhuanini 2011-09-08
  • 打赏
  • 举报
回复
应该没错,我是把EXE文件和汉字库在同一个目录下。可是就是说打不开汉字库文件。
jackyjkchen 2011-09-08
  • 打赏
  • 举报
回复
找老师出现了,可以结贴了
赵4老师 2011-09-08
  • 打赏
  • 举报
回复
#include <mem.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
const unsigned char bit[8]={128,64,32,16,8,4,2,1};
//--------------------------------------------------------
void dis(xoff,code)
unsigned int xoff,code;
{
unsigned char *buffer;
FILE *hzk;
unsigned long offset;
unsigned int q,w;
int x,y,width;

buffer=calloc(32,1);
if ((code&0xFF00)!=0) {
w=(code&0x00FF)-0xA1;
q=((code>>8)&0x00FF)-0xA1;
offset=q*0x5E+w;
offset*=32;
if ((hzk=fopen("HZK16","rb"))==NULL) {
closegraph();
printf("Can not open HZK16\r\n");
exit(1);
}
fseek(hzk,offset,SEEK_SET);
fread(buffer,1,32,hzk);
fclose(hzk);
width=2;
}
else {
if ((hzk=fopen("ASC16","rb"))==NULL) {
closegraph();
printf("Can not open ASC16\r\n");
exit(1);
}
offset=code*16;
fseek(hzk,offset,SEEK_SET);
fread(buffer,1,16,hzk);
fclose(hzk);
width=1;
}
for (y=0;y<16;y++) for (x=0;x<8*width;x++) {
if (buffer[y*width+x/8]&bit[x%8]) putpixel(xoff+x,y,15);
}
free(buffer);
}
//--------------------------------------------------------
void display(p)
unsigned char *p;
{

int i;
unsigned int qw;

i=0;
while (1) {
if (p[i]==0x0D||p[i]==0x1A) break;
if (p[i]>0xA0) {
qw=((unsigned int)p[i]<<8)|((unsigned int)p[i+1]&0x00FF);
dis(8*i,qw);
i+=2;
}
else {
qw=(unsigned int)p[i]&0x00FF;
dis(8*i,qw);
i++;
}
}

}
//--------------------------------------------------------
void main()
{
int gdriver = DETECT, gmode, errorcode;
long fl;
FILE *hz;
unsigned char *p;

initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi");
errorcode = graphresult();
if (errorcode != grOk) {
printf("Graphics error: %s\n", grapherrormsg(errorcode));
exit(1);
}
hz=fopen("hz","rb");
fseek(hz,0,SEEK_END);
fl=ftell(hz);
p=calloc((int)fl,sizeof(unsigned char));
rewind(hz);
fread(p,1,(int)fl,hz);
fclose(hz);
display(p);
free(p);
getch();
closegraph();
}
QQ515311445 2011-09-08
  • 打赏
  • 举报
回复
保证你的文件名没写错,你这样写要保证EXE文件与hzk.dat在同一目录
至善者善之敌 2011-09-08
  • 打赏
  • 举报
回复

/*写汉字*/
void writec(int x0,int y0,char *p,FILE *hzkp)
{
unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*屏蔽码*/
int i,j,x,y,pos;
char mat[32];/*字模*/
unsigned char qh,wh;/*区号位号*/
unsigned long offset;/*在字模库中的偏移量*/
qh=*p-0xa0;
wh=*(p+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(hzkp,offset,SEEK_SET);
fread(mat,32,1,hzkp);/*读字模*/
y=y0;
for(i=0;i<16;i++)/*画字模*/
{
x=x0;
pos=2*i;
for (j=0;j<16;j++)
{
if ((mask[j%8]&mat[pos+j/8])!=NULL)
putpixel(x,y,WHITE);
x++;
}
y++;
}
}


hzkp=fopen("hzk16.dat","rb");/*打开汉字库*/
if (hzkp==NULL)
{
printf("can not open hzk16.dat");
bioskey(0);
exit(1);
}

p=chinese;
while (*p!='\0')/*打印汉字*/
{
writec(xp,yp,p,hzkp);
p+=2;
xp+=20;
if (xp==600)
{
xp=120;
yp+=20;
}
}

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧