前阵子做一个项目的电话簿按照首笔画快速查询,先咨询了输入法的兄弟,说没有这样的接口(输入一个汉字,获取首笔画的编码。后来又说有这个接口,只是一直没有遇到这样的需求)。反正不管了,我就自己在网上找了一个比较全的汉字编码集合,并按照我自己的需求,用VC写了一个小程序,把这个汉字集合转成我所需要的结构。 如下,有需要的兄弟可以随便看看。

// 表unicodeBiHUa[]中的结构类型
typedef struct tagUnicode1BiHua
{
unsigned short uni; // 汉字的unicode码
unsigned char bh; // 首笔画数字指示
}Unicode1BiHua;
// 首笔画的数字指示与对应的unicode码
// 1表示“横”;2表示“竖”;3表示“撇”;4表示“捺”;5表示“折”
typedef struct tagBiHua2UniInd
{
unsigned char ind;
unsigned short uni;
}BiHua2UniInd; const BiHua2UniInd BiHua2Uni[] =
{
{1, 0x4e00},
{2, 0x4e28},
{3, 0x4e3f},
{4, 0x4e36},
{5, 0x4e59}
};

// 包含了2W多个汉字的编码
const Unicode1BiHua unicodeBiHUa[] =
{
{0x4e00,1},{0x4e01,1},{0x4e02,1},{0x4e03,1},{0x4e04,2},
{0x4e05,1},{0x4e06,1},{0x4e07,1},{0x4e08,1},{0x4e09,1}, 字符有限制,发不了这么多的字符。NND
{0x9f9a,1},{0x9f9b,3},{0x9f9c,3},{0x9f9d,3},{0x9f9e,4},
{0x9f9f,3},{0x9fa0,3},{0x9fa1,3},{0x9fa2,3},{0x9fa3,3},
{0x9fa4,3},{0x9fa5,3}
};
// 接口函数
// 入口参数:hanzi--待查找汉字的unicode
// 返回:该汉字的首笔画unicode码
unsigned short UnicodeGet1BihuaCode(unsigned short hanzi)
{
char ind = 0;
unsigned short low, high, mid; low = 1;
high = 20902;
while (low <= high)
{
mid = (low + high) / 2;
if (unicodeBiHUa[mid - 1].uni == hanzi)
{
ind = unicodeBiHUa[mid - 1].bh;
break;
}
else if (unicodeBiHUa[mid - 1].uni < hanzi)
low = mid + 1;
else
high = mid - 1;
} if (ind <1 || ind > 5)
return 0xffff;
else
return (BiHua2Uni[ind - 1].uni);
}
OVER!