用C语言调用中文字库显示

字库文件+代码=完成显示效果
链接:https://pan.baidu.com/s/1MDy76_QXNtzkpI1l3-9UUA
提取码:qb05
显示效果图如下:
用C语言调用中文字库显示_第1张图片
代码如下:

#include
#include 
#include 
#include 
#include 
#include 
#include
#define N 32  //固定位数
void Get_GBK_DZK(uint8_t *code);//得到字模  
int number_change(uint32_t); //将字模数据按二进制输出 
FILE *fd;
int main(void)
{  
	
	if(NULL == (fd=fopen("D:/ziku/ziku.bin","rb"))) //字库所在目录 ,自己修改!!!!!
	{
		printf("Open dir error\n");
	}
    Get_GBK_DZK("绝");
    printf("\n");
	Get_GBK_DZK("望"); 
	fclose(fd);     
	
}
void Get_GBK_DZK(uint8_t *code)//得到字模 
								
{
	uint8_t GBKH,GBKL;                 
    uint32_t offset;        
    GBKH=*code;
    GBKL=*(code+1);     
    if(GBKH>0XFE||GBKH<0X81)
		{
			return;
		}
    GBKH-=0x81;
    GBKL-=0x40;

    offset=((uint32_t)192*GBKH+GBKL)*32; //偏移量 
    if((-1 ==fseek(fd,offset,SEEK_SET)))
    {
    	printf("Fseek error\n"); 
	}
    uint32_t s[8]={0};  
    fread(s,4,8,fd); //将偏移后的fd数据流读取到s数组里
					//数据项的字节数为4byte,共8个数据项 
    
    int i;
	for(i=0;i<8;i++)
    {
    	
    	
    	number_change(s[i]);  //传递字模数据 
    	
	}
    return;
}
int number_change(uint32_t str) //将数据化为2进制(用的网上的,忘记地址了,就不标注了) 
{
 int arr[N] = {0};//将数组初始化为0(位数不满时,将输出0填补)
 int i;
 uint32_t n=str;
 for (i = N-1; i >=0; i--)  //对数组从后往前赋值
 {
  arr[i] = n % 2;
  n = n / 2;
 }
 /*以上是将数据化为2进制,放在arr数组里*/
 
 
 //以下就是输出二进制的数据了 
 for (i =  N - 1; i >=0; i--)
 {
	if(i==16)//当输出16个数据后,换个行,因为是16*16点阵 
	{
		printf("\n");
	}
	if(arr[i]==0) //数据为0,则输出为空格 
	{
		printf(" ");
		continue;
	 } 
  	printf("%d",arr[i]);//输出 1,因为已经化为2进制数据,所以到这里,只剩1了 
 }
 	printf("\n"); //两行二进制输出完毕后,再换个行 
	return 0;
}


你可能感兴趣的:(学习)