gethzdz.cpp

来自「一个提取国标汉字的C源码文件」· C++ 代码 · 共 88 行

CPP
88
字号
/*

做成日期:	2003年9月15日

程序作者:	zzwj5120
E-mail:		zzwj5120@sina.com
		
程序功能:	从HZK16中提取汉字对应的16*16点阵数据
入口参数:	unsigned int n,即两字节的汉字内码

其它说明:	汉字2字节由 unsigned int n 传递
		取得的点阵库放在 hzdz[32]
		返回的m是相应汉字在HZK16中的位置

计算公式:	汉字点阵在HZK16中的位置
		m = 32*([汉字第一字节]*94+[汉字第二字节])

参考资料:	单片机系统中的汉字显示 http://www.21ic.com
		c语言教材
*/


#include <stdio.h>
#include <conio.h>
#include <iostream.h>

unsigned char hzdz[32];

unsigned long gethzdz(unsigned int n)
{
	FILE *fp;
	static unsigned long m=0xb020;
	unsigned long j,k;
	char i;
	union word
	{
		unsigned int ab;
		struct bytes
		{
			unsigned char a;
			unsigned char b;
		}st;
	}un;
	//***********************************
	//start
	if((fp=fopen("HZK16","rb"))==NULL)
	{
		cout<<"read HZK16 error !";
		getch();
		return m ;
	}
	//************************************************
	un.ab=n;
	un.ab-=0xa1a1;
	j=un.st.b;
	k=un.st.a;
	//************************************************
	//view
	window(1,1,16,16);
	/*
	printf("\nthe new value un.ab-0xA1A1 = %04.4x ",un.ab);
	//getch();
	printf("\nunsigned char un.st.b = %02.2x ",un.st.b);
	printf(" to  unsigned long j = %02.2lx  ",j);
	printf("\nunsigned char un.st.a = %02.2x ",un.st.a);
	printf(" to  unsigned long k = %02.2lx \n",k);
	*/
	//getch();
	//************************************************
	m=32*(j*94+k);
	//**************************************************
	//view
	/*
	printf("we get the position = 32*(0x%x*94+0x%x)\n",j,k);
	printf("                    = %lx\n",m);
	*/
	//getch();
	//**************************************************
	if(fseek(fp,m,0))
	{
		fclose (fp);
		return 0xb020;//读HZK16文件到结尾
	}
	for(i=0;i<32;i++)
			hzdz[i]=fgetc(fp);
	fclose(fp);
	return (m);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?