请大虾帮忙看看,为什么不会显示中文.

chenhongda4766 2002-09-15 09:49:02
小小虫:
在程序中我用VC写中文.后用TRUBOC 2.0上运行,却显示日文,为什么?
#include"stdio.h"
#include"graphics.h"
#include"fcntl.h"
int handle;
int openhzk(void)
{ handle=open("d:\\16.fon",O_RDONLY);
if(handle==-1)
{ cputs("can't open library16");
getch();
closegraph();
exit(1);
}
}
/***************/
int puthz16(int x,int y,int z,int color,char *p)
{ unsigned int i,c1,c2,f=0;
int i1,i2,i3,rec;
long l;
char by[32];
while((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=i-0xa1;
f=1;
}
else
{
c2=i-0xa1;
f=0;
rec=c1*94+c2;
l=rec*32;
lseek(handle,l,SEEK_SET);
read(handle,by,32);
for(i1=0;i1<16;i1++)
for(i2=0;i2<2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1*2+i2],7-i3))
putpixel(x+i2*8+i3,y+i1,color);
x=x+16+z;
}
}
return(x);
}
/***********************/
int getbit(unsigned char c,int n)
{
return((c>>n)&1);
}
/*********************************************/
main()
{
int gdriver=DETECT,gmode=0;
unsigned char *f="你好吗";
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
setbkcolor(BLUE);
setcolor(LIGHTRED);
openhzk();
puthz16(230,200,2,12,f);
close(handle);
getch();
closegraph();
}
其中16.fon是16点阵汉字库,从windows\command下复制的.
...全文
30 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Behard 2002-09-16
  • 打赏
  • 举报
回复
代码可能错了
i-0xA1;
?????
i 是 unsigned int,而 0xA1 是 char
跟踪一下
hnwlk 2002-09-16
  • 打赏
  • 举报
回复
可能是显示字的算法和16.fon字库点阵排列不相符,用ucdos的16点阵字库
试试.
alexxing 2002-09-16
  • 打赏
  • 举报
回复
你所谓的“日文”其实是汉字编码的一部分,是旧式拼音用的符号
alexxing 2002-09-16
  • 打赏
  • 举报
回复
我仔细研究了一番

chs16.fon 的字体数据并不是按GB码排列的(基本顺序一样,但中间跳过了许多繁体字、异体字之类,就不连续了),而且找不到简单的对应公式

你必须找一个跟GB码呈线性对应关系的字体文件
chenhongda4766 2002-09-16
  • 打赏
  • 举报
回复
程序已搞定,谢谢各位大虾帮忙.
代码改编为:
c1=(i-0xa1)&0x7f;
.
.
c2=(i-0xa1)&0x7f;
.
.
l=rex*32L;
我不知到32L中的L代表什么意思,请各位大虾指点一二.
alexxing 2002-09-15
  • 打赏
  • 举报
回复
c1=i-0xa1;
...
c2=i-0xa1;
f=0;
rec=c1*94+c2;
l=rec*32;

的依据是什么?
我觉得你这些公式跟 chs16.fon 的结构可能不符合

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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