|
Hi,各位,请教一下:
1.在evc下是如何获取汉字的内码的?假设汉字为“房”,其内码为623F,在GB2312则为2331,如果知道GB2312下的内码怎样转换成Unicode下的内码?
2.在CE4.2下,系统的字库文件应该是simsum.ac3(如果我没错的话),那么如何根据内码获取汉字的字模信息(显示点阵信息)?
3.用区位码获取汉字的点阵信息
以16×16的点阵汉字库文件为例。一个汉字用了256个点共32个字节表示。汉字共分94区,每个区有94位汉字。机内码用两个字节表示,第一个字节存储区号(qh),为了和ASCII码相区别,范围从十六进制的A1H开始(小于80H地为ASCII码字符),对应区码的第一区;第二个字节是位号(wh),范围也从A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去A0A0H就得到该汉字的区位码。从而可以得到汉字在字库中的具体位置:
位置=(94*(qh-1) + wh-1) * 一个汉字字模占用的字节数
对于16×16的点阵汉字库,汉字在字库中的具体位置的计算公式就是:(94*(qh-1)+wh-1)*32。例如,“房”的机内码为十六进制的B7BF,则其区位码是B7BFH-A0A0H=171FH,转化为十进制就是2331,在汉字库中的位置就是32*[94*(23-1)+(31-1)]=67136字节以后的32个字节为“房”的显示点阵。
对于这种方法,我试过求出了汉字的区位码,但是按照如下方法在模拟器中取点阵信息:
if(!file.Open(_T("\\windows\\simsun.ttc"),CFile::modeRead,NULL))
{
AfxMessageBox(_T("error"));
return ;
}
add = 20013;
file.Seek(add,CFile::begin);//移动指针到地址处
file.Read(zima,32);//读取32个字节存到zima数组中
得到的点阵信息并不是对。
以上几个问题希望各位指点一下,呵呵
|
|