#include"stdio.h"
#include"dos.h"
#include"process.h"
#include"string.h"
voidmain(void){
longintnum_bytes,qm,wm;
unsignedchard,i,j,k,a[132],b[132];
unsignedchar*data;
unsignedchar*hz;
staticunsignedchardd[103];
FILE*fp;
if((fp=fopen("hzk16f","rb"))==NULL){
printf("can'topenhzk16\n");
exit(1);
}
clrscr();
while(1){
data=(unsignedchar*)malloc(33);
printf("pleaseinput:\n");
scanf("%s",dd);/*输入一个汉字*/
qm=*dd;/*通过区位码计算其在hzk16f文件中的偏移地址*/
qm=qm-161;
if(qm>87)exit(0);
wm=*(dd+1);
wm=wm-161;
if(wm>94)exit(0);
num_bytes=((long)qm*94+wm)*32;
fseek(fp,num_bytes,SEEK_SET);
fgets(data,33,fp);
for(i=0;i<32;i++)b[i]=*data++;
for(i=0;i<32;i+=2)a[i/2]=b[i];
for(i=0;i<32;i+=2)a[i/2+16]=b[i+1];
for(i=8;i<16;i++)b[i]=a[i];
for(i=8;i<16;i++)a[i]=a[i+8];
for(i=8;i<16;i++)a[i+8]=b[i];
/*转换,hzf16f在电脑的储存格式是以行为字节计算的,一般的lcd都采用以列为字节计算*/
for(k=0;k<32;k+=8){
for(j=0;j<8;j++){
d=0;
for(i=0;i<8;i++){
if(a[i+k]>=0x80){
switch(i){
case0:d+=1;break;
case1:d+=2;break;
case2:d+=4;break;
case3:d+=8;break;
case4:d+=0x10;break;
case5:d+=0x20;break;
case6:d+=0x40;break;
case7:d+=0x80;break;
}
}
}
for(i=0;i<8;i++)a[i+k]<<=1;
b[j+k]=d;
}
}
clrscr();
printf("/*%s:*/\n",dd);/*输出0x00格式的16进制数*/
for(k=0;k<32;k+=8){
for(j=0;j<8;j++)printf("0x%x,",b[j+k]);
printf("\n");
}
getch();
}
}