如何获取汉字的首笔画编码

来源:互联网 发布:淘宝全球直播靠谱吗 编辑:程序博客网 时间:2024/06/09 17:15

    前阵子做一个项目的电话簿按照首笔画快速查询,先咨询了输入法的兄弟,说没有这样的接口(输入一个汉字,获取首笔画的编码。后来又说有这个接口,只是一直没有遇到这样的需求)。反正不管了,我就自己在网上找了一个比较全的汉字编码集合,并按照我自己的需求,用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!

原创粉丝点击