c++ 中文转拼音的封装, char 类型 不支持 中文 已解决

        在日常业务中,需要进行中文转拼音的检索。已便实现对应的 模糊搜索。

 使用方法

	std::string res = "我是中国人";

	char* result = new char[res.length() + 1];
	for (int i = 0; i < res.length(); ++i)
	{
		result[i] = res[i];
	}

	result[res.length()] = '\0';

	std::string str2(result);

	std::string p = m_pinyin->chineseConvertPinYinAllSpell(str2);

	qDebug() << "pinyin 9999999999999" << p;


void CCendPinyinSearch::insertSearchIndex(int index,QString name)
{

	// 检索索引
	QMap<int,QString> m_pSearchIndex;

    m_pSearchIndex.insert(index, name);
}

void CCendPinyinSearch::getSeachIndexList(QString name)
{

    QMap<int, QString>::const_iterator i;

    for (i = m_pSearchIndex.constBegin(); i != m_pSearchIndex.constEnd(); ++i) 
    {
        qDebug() << "123123777777777777777 index" << i.key() << ": " << i.value();

        if (i.value() == name)
        {
            qDebug() << "123123123888888888888 index" << i.key() << ": " << i.value();
        }
    }
}

//检查哈希表  查找
bool CCendPinyinSearch::isContainsAllCharactersHash(const std::string& mainString, const std::string& subString) {
	  // 初始化哈希表  
		std::unordered_map<char, int> charCounts;
		for (char c : subString) {
			charCounts[c]++;
		}

		// 遍历主字符串并更新哈希表  
		for (char c : mainString) {
			if (charCounts.find(c) != charCounts.end()) {
				charCounts[c]--;
				if (charCounts[c] == 0) {
					// 如果字符的计数减到0,从哈希表中删除该字符  
					charCounts.erase(c);
				}
			}
		}

	// 检查哈希表  
	return charCounts.empty(); // 如果哈希表为空,说明所有字符都被找到了  
}

// 排序算法 查找匹配
bool CCendPinyinSearch::isContainsAllCharacters(const std::string& mainString, const std::string& subString) {
    // 对两个字符串进行排序
    std::string sorted_main = mainString;
    std::string sorted_sub = subString;
    std::sort(sorted_main.begin(), sorted_main.end());
    std::sort(sorted_sub.begin(), sorted_sub.end());

    // 使用双指针法检查 sorted_sub 是否是 sorted_main 的子序列  
    int i = 0, j = 0;
    while (i < sorted_sub.length() && j < sorted_main.length()) {
        if (sorted_sub[i] == sorted_main[j]) {
            i++; // 移动到 sorted_sub 的下一个字符  
        }
        j++; // 移动到 sorted_main 的下一个字符  
    }

    // 如果 sorted_sub 的所有字符都在 sorted_main 中找到,则 sorted_sub 是 sorted_main 的子序列  
    return  sorted_sub.length() == i;
}


std::string CCendPinyinSearch::chineseConvertPinYinAllSpell(const std::string & dest_chinese)
{
    static const int spell_value[] = { -20319, -20317, -20304, -20295,
        -20292, -20283, -20265, -20257, -20242, -20230, -20051, -20036,
        -20032, -20026,
        -20002, -19990, -19986, -19982, -19976, -19805, -19784, -19775,
        -19774, -19763, -19756, -19751, -19746, -19741, -19739, -19728,
        -19725, -19715, -19540, -19531, -19525, -19515, -19500, -19484,
        -19479, -19467, -19289, -19288, -19281, -19275, -19270, -19263,
        -19261, -19249, -19243, -19242, -19238, -19235, -19227, -19224,
        -19218, -19212, -19038, -19023, -19018, -19006, -19003, -18996,
        -18977, -18961, -18952, -18783, -18774, -18773, -18763, -18756,
        -18741, -18735, -18731, -18722, -18710, -18697, -18696, -18526,
        -18518, -18501, -18490, -18478, -18463, -18448, -18447, -18446,
        -18239, -18237, -18231, -18220, -18211, -18201, -18184, -18183,
        -18181, -18012, -17997, -17988, -17970, -17964, -17961, -17950,
        -17947, -17931, -17928, -17922, -17759, -17752, -17733, -17730,
        -17721, -17703, -17701, -17697, -17692, -17683, -17676, -17496,
        -17487, -17482, -17468, -17454, -17433, -17427, -17417, -17202,
        -17185, -16983, -16970, -16942, -16915, -16733, -16708, -16706,
        -16689, -16664, -16657, -16647, -16474, -16470, -16465, -16459,
        -16452, -16448, -16433, -16429, -16427, -16423, -16419, -16412,
        -16407, -16403, -16401, -16393, -16220, -16216, -16212, -16205,
        -16202, -16187, -16180, -16171, -16169, -16158, -16155, -15959,
        -15958, -15944, -15933, -15920, -15915, -15903, -15889, -15878,
        -15707, -15701, -15681, -15667, -15661, -15659, -15652, -15640,
        -15631, -15625, -15454, -15448, -15436, -15435, -15419, -15416,
        -15408, -15394, -15385, -15377, -15375, -15369, -15363, -15362,
        -15183, -15180, -15165, -15158, -15153, -15150, -15149, -15144,
        -15143, -15141, -15140, -15139, -15128, -15121, -15119, -15117,
        -15110, -15109, -14941, -14937, -14933, -14930, -14929, -14928,
        -14926, -14922, -14921, -14914, -14908, -14902, -14894, -14889,
        -14882, -14873, -14871, -14857, -14678, -14674, -14670, -14668,
        -14663, -14654, -14645, -14630, -14594, -14429, -14407, -14399,
        -14384, -14379, -14368, -14355, -14353, -14345, -14170, -14159,
        -14151, -14149, -14145, -14140, -14137, -14135, -14125, -14123,
        -14122, -14112, -14109, -14099, -14097, -14094, -14092, -14090,
        -14087, -14083, -13917, -13914, -13910, -13907, -13906, -13905,
        -13896, -13894, -13878, -13870, -13859, -13847, -13831, -13658,
        -13611, -13601, -13406, -13404, -13400, -13398, -13395, -13391,
        -13387, -13383, -13367, -13359, -13356, -13343, -13340, -13329,
        -13326, -13318, -13147, -13138, -13120, -13107, -13096, -13095,
        -13091, -13076, -13068, -13063, -13060, -12888, -12875, -12871,
            -12860, -12858, -12852, -12849, -12838, -12831, -12829, -12812,
        -12802, -12607, -12597, -12594, -12585, -12556, -12359, -12346,
        -12320, -12300, -12120, -12099, -12089, -12074, -12067, -12058,
        -12039, -11867, -11861, -11847, -11831, -11798, -11781, -11604,
        -11589, -11536, -11358, -11340, -11339, -11324, -11303, -11097,
        -11077, -11067, -11055, -11052, -11045, -11041, -11038, -11024,
        -11020, -11019, -11018, -11014, -10838, -10832, -10815, -10800,
        -10790, -10780, -10764, -10587, -10544, -10533, -10519, -10331,
        -10329, -10328, -10322, -10315, -10309, -10307, -10296, -10281,
        -10274, -10270, -10262, -10260, -10256, -10254 };
    // 395个字符串,每个字符串长度不超过6 
    static const char spell_dict[396][7] = { "a", "ai", "an", "ang",
    "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi",
    "bian", "biao",
    "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao",
    "ce", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen",
    "cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang",
    "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui",
    "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "deng", "di",
    "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan",
    "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei",
    "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao",
    "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai",
    "guan", "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang",
    "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua",
    "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian",
    "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan",
    "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "ken",
    "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui",
    "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei",
    "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling",
    "liu", "long", "lou", "lu", "lv", "luan", "lue", "lun", "luo",
    "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi",
    "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu",
    "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni",
    "nian", "niang", "niao", "nie", "nin", "ning", "niu", "nong",
    "nu", "nv", "nuan", "nue", "nuo", "o", "ou", "pa", "pai", "pan",
    "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie",
    "pin", "ping", "po", "pu", "qi", "qia", "qian", "qiang", "qiao",
    "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun",
    "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou",
    "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang",
    "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao",
    "she", "shen", "sheng", "shi", "shou", "shu", "shua",
    "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song",
    "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai",
    "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie",
    "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo",
    "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi",
    "xia", "xian", "xiang", "xiao", "xie", "xin", "xing",
    "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang",
    "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you",
    "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze",
    "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang",
    "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu",
    "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo",
    "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo" };
    std::string pinyin;
    const int length = dest_chinese.length();
    for (int j = 0, chrasc = 0; j < length;) {
        // 非汉字处理
        if (dest_chinese.at(j) >= 0 && dest_chinese.at(j) < 128) {
            pinyin += dest_chinese[j];
            // 偏移下标
            j++;
            continue;
        } // 汉字处理
        chrasc = dest_chinese[j] * 256 + dest_chinese[j + 1] + 256;
        if (chrasc > 0 && chrasc < 160) {
            // 非汉字
            pinyin += dest_chinese.at(j);
            // 偏移下标
            j++;
        }
        else {
            // 汉字
            for (int i = (sizeof(spell_value) / sizeof(spell_value[0]) - 1);
                i >= 0; --i) {
                // 查找字典
                if (spell_value[i] <= chrasc) {
                    pinyin += spell_dict[i];
                    break;
                }
            } // 偏移下标 (汉字双字节)
            j += 2;
        }
    }
    // for end
    return pinyin;
}

 测试的 拼音完全正确,谁能告诉我哪儿出错l

错误的拼音!!! 

 拼音 翻译的很到位,关键不认识!

正确的 拼音

		// 查询 数据拼音
		//std::string p = m_pPinyinSearch->chineseConvertPinYinAllSpell(searchName.toStdString());

		std::string p = m_pPinyinSearch->chineseConvertPinYinAllSpell(string((const char*)searchName.toLocal8Bit()));

 

string与QString之间的转换 

 1.fromStdString直接转换

string str;
QString qstr;
 
//从QString 到 std::string
str = qstr.toStdString();
 
//从std::string 到QString
qstr = QString::fromStdString(str);

 2.fromLocal8Bit(cstr.c_str())

std::string cstr;
QString qstring;
 
//从std::string 到QString
qstring = QString(QString::fromLocal8Bit(cstr.c_str()));
 
//从QString 到 std::string
cstr = string((const char *)qstring.toLocal8Bit());

参考 

改良版本

#include "CCendPinyinDataSearch.h"
#include "CCendPinyinData.h"
//
/// 汉字转拼音函数 适合gb2312和utf8
//
#define HZ2PY_OUTPUT_BUF_ARRAY_SIZE 5120	//一个字段的拼音最长长度
#define HZ2PY_MAX_PINYIN_SIZE 30			//一个字的拼音最长长度
#define HZ2PY_UTF8_CHECK_LENGTH 20			//检查是否为utf8编码时所检查的字符长度

CCendPinyinDataSearch::CCendPinyinDataSearch(QWidget* parent)
	: QWidget(parent)
{

    // 测试拼音转换
    testData();
}

CCendPinyinDataSearch::~CCendPinyinDataSearch()
{

}

void CCendPinyinDataSearch::insertSearchIndex(int index,QString name)
{
    m_pSearchIndex.insert(index, name);
}

QStringList CCendPinyinDataSearch::getSeachListData()
{
    return m_pSearchIndexList;
}

void CCendPinyinDataSearch::getSeachIndexList(QString name)
{
    QMap<int, QString>::const_iterator i;

    m_pSearchIndexList = {};

    for (i = m_pSearchIndex.constBegin(); i != m_pSearchIndex.constEnd(); ++i) 
    {  
        if (isContainsAllCharacters(i.value().toStdString(), name.toStdString()))
        {
            m_pSearchIndexList << QString::number(i.key());
        }
    }
}

bool CCendPinyinDataSearch::isContainsAllCharacters(const std::string& mainString, const std::string& subString) {
    // 对两个字符串进行排序
    std::string sorted_main = mainString;
    std::string sorted_sub = subString;
    std::sort(sorted_main.begin(), sorted_main.end());
    std::sort(sorted_sub.begin(), sorted_sub.end());

    // 使用双指针法检查 sorted_sub 是否是 sorted_main 的子序列  
    int i = 0, j = 0;
    while (i < sorted_sub.length() && j < sorted_main.length()) {
        if (sorted_sub[i] == sorted_main[j]) {
            i++; // 移动到 sorted_sub 的下一个字符  
        }
        j++; // 移动到 sorted_main 的下一个字符  
    }

    // 如果 sorted_sub 的所有字符都在 sorted_main 中找到,则 sorted_sub 是 sorted_main 的子序列  
    return  sorted_sub.length() == i;
}

QString CCendPinyinDataSearch::chineseConvertPinYinAllSpell(QString dest_chinese,bool isUtf8)
{
    //char inbuf[1000] = "平阳路龙城大街龙瑞苑小区刘峰峰收";
    char* outbuf = new char[HZ2PY_OUTPUT_BUF_ARRAY_SIZE];
    memset(outbuf, '\0', sizeof(char) * HZ2PY_OUTPUT_BUF_ARRAY_SIZE);
    
    QTextCodec* code;
    if (isUtf8)
    {
        code = QTextCodec::codecForName("UTF-8");
    }
    else {
        code = QTextCodec::codecForName("gbk");
    }

    std::string name = code->fromUnicode(dest_chinese).data();

    char* inbuf = (char*)name.c_str();

    if (is_utf8_string(inbuf)) {
        printf("utf8:");
        pinyin_utf8(inbuf, outbuf);
    }
    else {
        printf("gb2312:");
        pinyin_gb2312(inbuf, outbuf, false, false, true, true, true);
    }
    return QString::fromLocal8Bit(outbuf);;
}

bool CCendPinyinDataSearch::safeAddToOutbuf(char* outbuf,int &iOutbuf,char* pinyinValue,int iPinyinValue) {
    int iOutbufWord=1,iPinyinValueWord=1,m;
    for (m=0;m<iOutbuf;m++){    //统计已经转化的词数
        if (outbuf[m]==' '){
            iOutbufWord++;
        }
    }
    for (m=0;m<iPinyinValue;m++){   //统计多音字数目
        if (pinyinValue[m]=='|'){
            iPinyinValueWord++;
        }
    }
    bool flag=false;    //是否超出范围
    int iNewOutbuf=iOutbufWord*iPinyinValue+iPinyinValueWord*iOutbuf+iOutbufWord+iPinyinValueWord-1-iOutbufWord*iPinyinValueWord;//想想为啥
    if (iNewOutbuf<HZ2PY_OUTPUT_BUF_ARRAY_SIZE){
        int totalWord=iOutbufWord*iPinyinValueWord;
        //空间申请
        char ** tempOutbuf=new char *[totalWord];
        if(!tempOutbuf){
            fprintf(stdout,"FATAL ERROR: out of memory (failed to malloc %d bytes)\n",totalWord);
            return false;
        }
        for(m=0;m<totalWord;m++){
            tempOutbuf[m]=new char[HZ2PY_OUTPUT_BUF_ARRAY_SIZE];
            if(!tempOutbuf[m]){
                fprintf(stdout,"FATAL ERROR: out of memory (failed to malloc %d bytes)\n",HZ2PY_OUTPUT_BUF_ARRAY_SIZE);
                while(m>0){
                    delete [] tempOutbuf[m-1];
                    m--;
                }
                delete[] tempOutbuf;
                return false;
            }
        }
        char *tmp1=outbuf;
        int n=0,i,j,k;
        while (*tmp1!='\0'||n==0)   //注意,可能是最开始,故加上n==0
        {
            n+=iPinyinValueWord;
            i=0;
            while (*tmp1!=' '&&*tmp1!='\0')
            {
                for (m=n-iPinyinValueWord;m<n;m++)
                {
                    tempOutbuf[m][i]=*tmp1;
                }
                i++;
                tmp1++;
            }
            if (*tmp1==' ')
            {
                tmp1++;
            }
            k=0;
            for (m=n-iPinyinValueWord;m<n;m++)
            {
                j=i;
                while(k<iPinyinValue&&pinyinValue[k]!='|'&&pinyinValue[k]!='\0'){
                    tempOutbuf[m][j]=pinyinValue[k];
                    j++;
                    k++;
                }
                if (pinyinValue[k]=='|')
                {
                    k++;
                }
                tempOutbuf[m][j]='\0';
            }
        }
 
        //将所有的东西都整合到outbuf中
        outbuf[0]='\0';
        for (m=0;m<totalWord;m++)
        {
            outbuf=strcat(outbuf,tempOutbuf[m]);
 
            if (m!=totalWord-1)
            {
                outbuf=strcat(outbuf," ");
            }
        }
        iOutbuf=iNewOutbuf;
        //删除所申请的空间
        for (m=0;m<totalWord;m++)
        {
            delete[] tempOutbuf[m];
        }
        delete[] tempOutbuf;
        flag=true;
    }
    return flag;
}

void CCendPinyinDataSearch::pinyin_utf8(char* inbuf,char* outbuf, bool m_blnSimaple,bool polyphone_support,bool m_blnFirstBig,bool m_blnAllBiG,bool m_LetterEnd, bool m_unknowSkip,bool m_filterPunc)
{
    int inbuf_len=strlen(inbuf);
    char *_tmp;
    char *_tmp2;
    char py_tmp[HZ2PY_MAX_PINYIN_SIZE] = "";    //原始拼音
    char py_tmp2[HZ2PY_MAX_PINYIN_SIZE] = "";   //处理后的拼音
    int uni;
    int iOutbuf = 0;
    char sep='\'';          //分隔符

    for (int i=0;i<inbuf_len;i++)
    {
        if ( (unsigned char)inbuf[i] < 0x80 )  {  //若是英文或数字
            if(m_filterPunc&&!(inbuf[i]>='a'&&inbuf[i]<='z'||inbuf[i]>='A'&&inbuf[i]<='Z')){
                continue;
            }
            if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],1)) return;
            //if(m_LetterEnd) if(!safeAddToOutbuf(outbuf,iOutbuf,&sep,1)) return;  //英文字母也打分隔符
            continue;  
        }else if((inbuf[i]&0xE0)==0xC0){    //两个字符,表示是泛欧语系或斯拉夫语
            if(i+1>=inbuf_len){ //最后一个不够了
                return;
            }
            if(!m_unknowSkip){
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],2)) return;
            }
            i++;
        }else if ((inbuf[i] & 0xF0) == 0xE0){   //三个字符,汉字、日语等亚洲字符
            if(i+2>=inbuf_len){ 
                return;
            }
            uni = (((int)(inbuf[i] & 0x0F)) << 12)
                | (((int)(inbuf[i+1] & 0x3F)) << 6)
                | (inbuf[i+2] & 0x3F);
            if (uni>19967&&uni<40870)
            {
                memset(py_tmp, '\0', sizeof(char)*HZ2PY_MAX_PINYIN_SIZE);
                memset(py_tmp2, '\0', sizeof(char)*HZ2PY_MAX_PINYIN_SIZE);

                strcpy_s(py_tmp,HZ2PY_MAX_PINYIN_SIZE, _pinyin_table_[uni - 19968]);

                _tmp = py_tmp;
                _tmp2 = py_tmp2;

                if (m_blnSimaple)   //只支持首字母
                {
                    *_tmp2 = *_tmp;
                    _tmp ++;
                    _tmp2 ++;
                    while(*_tmp != '\0')     
                    {
                        if (*_tmp == '|' || *(_tmp - 1) == '|') 
                        {
                            *_tmp2 = *_tmp; 
                            _tmp2 ++;
                        }
                        _tmp ++;
                    }
                    _tmp2 = py_tmp2;
                }
                else
                {
                    strcpy_s(py_tmp2,HZ2PY_MAX_PINYIN_SIZE, py_tmp);
                }

                if (m_blnAllBiG)    //全部大写
                {
                    while (*_tmp2!='\0')
                    {
                        if (*_tmp2>='a'&&*_tmp2<='z')
                        {
                            *_tmp2=*_tmp2-32;
                        }
                        _tmp2++;
                    }
                    _tmp2 = py_tmp2;
                }

                if(m_blnFirstBig){  //首字母大写
                    if (*_tmp2>='a'&&*_tmp2<='z')
                    {
                        *_tmp2=*_tmp2-32;
                    }
                }

                if (!polyphone_support) //不支持多音字
                {
                    while(*_tmp2 != '\0') 
                    {
                        if (*_tmp2 == '|')    
                        {
                            *_tmp2 = '\0'; 
                            break;
                        }
                        _tmp2 ++;
                    }

                    _tmp2 = py_tmp2;
                }

                if(!safeAddToOutbuf(outbuf,iOutbuf,py_tmp2,strlen(py_tmp2)))    return;
                if(m_LetterEnd) if(!safeAddToOutbuf(outbuf,iOutbuf,&sep,1)) return;  
                i=i+2;
            }else if( !m_unknowSkip){
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],3)) return;
                i=i+2;
            }
        }else  if ( (inbuf[i] & 0xF8) == 0xF0 ){//四个字节
            if(i+3>=inbuf_len){ 
                return;
            }
            if( !m_unknowSkip){
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],4)) return;
            }
            i=i+3;
        }else if ( (inbuf[i] & 0xFC) == 0xF8 ){ //五个字节
            if(i+4>=inbuf_len){ 
                return;
            }
            if( !m_unknowSkip){
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],5)) return;
            }
            i=i+4;
        }else if ( (inbuf[i] & 0xFE) == 0xFC ){ //六个字节
            if(i+5>=inbuf_len){ 
                return;
            }
            if( !m_unknowSkip){
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],6)) return;
            }
            i=i+5;
        }else{
            if ( !m_unknowSkip)
            {
                if(!safeAddToOutbuf(outbuf,iOutbuf,&inbuf[i],1)) return;
            }
            i++;
            //break;
        }
    }
}

void CCendPinyinDataSearch::pinyin_gb2312(char * inbuf, char * outbuf, bool m_blnSimaple, bool polyphone_support, bool m_blnFirstBig, bool m_blnAllBiG, bool m_LetterEnd, bool m_unknowSkip, bool m_filterPunc)
{
    /*
    bool m_blnSimaple=false; //是否简拼
    bool m_blnFirstBig=false; //拼音第一个字母是否大写
    bool m_blnAllBiG=false; //拼音是否大写
    bool m_LetterEnd=false; //每个拼音后是否用分隔符
    bool m_unknowSkip=false; //未知拼音的字是否略过
    bool m_filterPunc=true; //是否过滤标点
    */
    unsigned char ucHigh, ucLow;
    int nCode,j,k;
    int inbuf_len = strlen(inbuf);
    int iOutbuf = 0;
    char pinyinValue[HZ2PY_MAX_PINYIN_SIZE];
    char sep = '\'';
    for (int i = 0; i < inbuf_len; i++) {
        if ((unsigned char) inbuf[i] < 0x80) {
            if (m_filterPunc && !(inbuf[i] >= 'a' && inbuf[i] <= 'z' || inbuf[i] >= 'A' && inbuf[i] <= 'Z')) {
                continue;
            }
            if (!safeAddToOutbuf(outbuf, iOutbuf, &inbuf[i], 1)) 
                return;
            //
            if(m_LetterEnd) 
                if(!safeAddToOutbuf(outbuf,iOutbuf,&sep,1)) 
                    return; 
            //英文字母也打分隔符
            continue;
        }
        ucHigh = (unsigned char) inbuf[i];
        ucLow = (unsigned char) inbuf[i + 1];
        if (ucHigh < 0xa1 || ucLow < 0xa1) 
            continue;
        else 
            nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
        int strRes = findLetter(nCode, pinyinValue);
        if (m_unknowSkip && !strRes) {
            i++;
            continue;
        }
        if (!strRes) {
            if (!safeAddToOutbuf(outbuf, iOutbuf, &inbuf[i], 2)) 
                return;
            i++;
            continue;
        }
        if (!polyphone_support) { //不支持多音字
            k=0;
            while (pinyinValue[k] != '\0') {
                if (pinyinValue[k] == '|') {
                    pinyinValue[k] = '\0';
                    break;
                }
                k++;
            }
        }
        if (m_blnSimaple) //只支持首字母
        {
            k = 1;
            j = 1;
            while (pinyinValue[k] != '\0') {
                if (pinyinValue[k] == '|' || pinyinValue[k - 1] == '|') {
                    pinyinValue[j] = pinyinValue[k];
                    j++;
                }
                k++;
            }
            pinyinValue[j] = '\0'; //只取第一个字符 
        }
        int iPinyinValue = strlen(pinyinValue);
        if (!m_blnFirstBig) //首字母是否大写
        {
            pinyinValue[0] = pinyinValue[0] + 32;
            for (j = 1; j < iPinyinValue; j++) {
                if (pinyinValue[j - 1] == '|' && pinyinValue[j] >= 'A' && pinyinValue[j] <= 'Z') {
                    pinyinValue[j] = pinyinValue[j] + 32;
                }
            }
        }
        if (!m_blnAllBiG) {
            for (j = 1; j < iPinyinValue; j++) {
                if (pinyinValue[j] >= 'A' && pinyinValue[j] <= 'Z') { //strRes.SetAt(j, (strRes.GetAt(j) + 32));
                    pinyinValue[j] = pinyinValue[j] + 32;
                }
            }
        }
        if (!safeAddToOutbuf(outbuf, iOutbuf, pinyinValue, iPinyinValue)) 
            return;
        i++;
        if (m_LetterEnd) if (!safeAddToOutbuf(outbuf, iOutbuf, &sep, 1)) 
            return;
    }
} 

int CCendPinyinDataSearch::findLetter(int nCode, char* strValue)  
{ 
    switch(nCode)  
    {  
    case 6325:  
    case 6436:  
    case 7571:  
    case 7925:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"A");
        break;  
    case 6263:  
    case 6440:  
    case 7040:  
    case 7208:  
    case 7451:  
    case 7733:  
    case 7945:  
    case 8616:
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"AI");  
        break;  
    case 5847:  
    case 5991:  
    case 6278:  
    case 6577:  
    case 6654:  
    case 7281:  
    case 7907:  
    case 8038:  
    case 8786:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"AN"); 
        break;  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"ANG"); 
        break;  
    case 5974:  
    case 6254:  
    case 6427:  
    case 6514:  
    case 6658:  
    case 6959:  
    case 7033:  
    case 7081:  
    case 7365:  
    case 8190:  
    case 8292:  
    case 8643:  
    case 8701:  
    case 8773:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"AO"); 
        break;  
    case 6056:  
    case 6135:  
    case 6517:  
    case 7857:  
    case 8446:  
    case 8649:  
    case 8741:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BA");   
        break;  
    case 6267:  
    case 6334:  
    case 7494:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BAI"); 
        break;  
    case 5870:  
    case 5964:  
    case 7851:  
    case 8103:  
    case 8113:  
    case 8418:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BAN"); 
        break;  
    case 6182:  
    case 6826:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BANG");  
        break;  
    case 6165:  
    case 7063:  
    case 7650:  
    case 8017:  
    case 8157:  
    case 8532:  
    case 8621: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BAO");  
        break;  
    case 5635:  
    case 5873:  
    case 5893:  
    case 5993:  
    case 6141:  
    case 6703:  
    case 7753:  
    case 8039:  
    case 8156:  
    case 8645:  
    case 8725:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BEI");  
        break;  
    case 5946:  
    case 5948:  
    case 7458:  
    case 7928:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BEN");  
        break;  
    case 6452:  
    case 7420:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BENG");  
        break;  
    case 5616:  
    case 5734:  
    case 6074:  
    case 6109:  
    case 6221:  
    case 6333:  
    case 6357:  
    case 6589:  
    case 6656:  
    case 6725:  
    case 6868:  
    case 6908:  
    case 6986:  
    case 6994:  
    case 7030:  
    case 7052:  
    case 7221:  
    case 7815:  
    case 7873:  
    case 7985:  
    case 8152:  
    case 8357:  
    case 8375:  
    case 8387:  
    case 8416:  
    case 8437:  
    case 8547:  
    case 8734:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BI");   
        break;  
    case 5650:  
    case 5945:  
    case 6048:  
    case 6677:  
    case 6774:  
    case 7134:  
    case 7614:  
    case 7652:  
    case 7730:  
    case 7760:  
    case 8125:  
    case 8159:  
    case 8289:  
    case 8354:  
    case 8693:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BIAN"); 
        break;  
    case 7027:  
    case 7084:  
    case 7609:  
    case 7613:  
    case 7958:  
    case 7980:  
    case 8106:  
    case 8149:  
    case 8707:  
    case 8752:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BIAO");   
        break;  
    case 8531:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BIE"); 
        break;  
    case 5747:  
    case 6557:  
    case 7145:  
    case 7167:  
    case 7336:  
    case 7375:  
    case 7587:  
    case 7957:  
    case 8738:  
    case 8762: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BIN");  
        break;  
    case 5787:  
    case 5891:  
    case 6280:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BING");   
        break;  
    case 5781:  
    case 6403:  
    case 6636:  
    case 7362:  
    case 7502:  
    case 7771:  
    case 7864:  
    case 8030:  
    case 8404:  
    case 8543:  
    case 8559:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BO");  
        break;  
    case 6318:  
    case 6945:  
    case 7419:  
    case 7446:  
    case 7848:  
    case 7863:  
    case 8519:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"BU");  
        break;  
    case 6474:  
    case 7769:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CA"); 
        break;  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CAI");  
        break;  
    case 6978:  
    case 7078:  
    case 7218:  
    case 8451:  
    case 8785: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CAN");   
        break;  
    case 5687:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CANG"); 
        break;  
    case 6448:  
    case 6878:  
    case 8309:  
    case 8429:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CAO"); 
        break;  
    case 6692:
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CE");   
        break;  
    case 6515:  
    case 6825:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CEN");  
        break;  
    case 6465:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CENG");   
        break;  
    case 6639:  
    case 6766:  
    case 7017:  
    case 7230:  
    case 7311:  
    case 7322:  
    case 7363:  
    case 7942:  
    case 7979:  
    case 8135:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHA");  
        break;  
    case 5713:  
    case 7846:  
    case 8091:  
    case 8218:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHAI"); 
        break;  
    case 5770:  
    case 5838:  
    case 6159:  
    case 6667:  
    case 6893:  
    case 6904:  
    case 6981:  
    case 7031:  
    case 7086:  
    case 7472:  
    case 7688:  
    case 7966:  
    case 8324:  
    case 8580:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHAN"); 
        break;  
    case 5686:  
    case 5943:  
    case 6041:  
    case 6137:  
    case 6660:  
    case 6568:  
    case 6749:  
    case 7029:  
    case 7047:  
    case 7438:  
    case 7509:  
    case 8680:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHANG"); 
        break;  
    case 6687:  
    case 7443:  
    case 8173:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHAO");  
        break;  
    case 5969:  
    case 7726:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHE");   
        break;  
    case 5840:  
    case 5863:  
    case 6251:  
    case 6433:  
    case 6923:  
    case 7201:  
    case 7320:  
    case 7755:  
    case 8619:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHEN"); 
        break;  
    case 5609:  
    case 5984:  
    case 7239:  
    case 7263:  
    case 7583:  
    case 7810:  
    case 7881:  
    case 7905:  
    case 8146:  
    case 8241:  
    case 8508:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHENG"); 
        break;  
    case 5749:  
    case 6015:  
    case 6061:  
    case 6319:  
    case 6374:  
    case 6420:  
    case 6445:  
    case 6633:  
    case 7042:  
    case 7523:  
    case 7787:  
    case 8023:  
    case 8101:  
    case 8161:  
    case 8231:  
    case 8304:  
    case 8355:  
    case 8388:  
    case 8489:  
    case 8556:  
    case 8746:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHI"); 
        break;  
    case 6091:  
    case 6671:  
    case 6731:  
    case 8409:  
    case 8430:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHONG"); 
        break;  
    case 5717:  
    case 6492:  
    case 6716:  
    case 8112:  
    case 8637: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHOU");  
        break;  
    case 5601:  
    case 5927:  
    case 6680:  
    case 6732:  
    case 7109:  
    case 7238:  
    case 7290:  
    case 7343:  
    case 8150:  
    case 8260:  
    case 8573:  
    case 8777:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHU"); 
        break;  
    case 6285:  
    case 6408:  
    case 7590:  
    case 8563:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUAI");  
        break;  
    case 6622:  
    case 6955:  
    case 7516:  
    case 7843:  
    case 8413:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUAN"); 
        break;  
    case 6675:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUANG"); 
        break;  
    case 5879:  
    case 7302:  
    case 7319: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUI");  
        break;  
    case 6127:  
    case 8040:  
    case 8277:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUN");  
        break;  
    case 7401: 
    case 8554:  
    case 8626:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CHUO");  
        break;  
    case 6075:  
    case 6358:  
    case 7684:  
    case 8043: 
    case 8457:  
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CI");  
        break;  
    case 6042:
    case 6840: 
    case 7085: 
    case 7193: 
    case 7214: 
    case 7240: 
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"CONG"); 
        break; 
    case 7308:
    case 7403: 
    case 7577:
        strcpy_s(strValue,HZ2PY_MAX_PINYIN_SIZE,"COU"); 
        break; 
    case 6180:
    case 6562:
    case 6607:
    case 7367:
    case 8501:
    case 8530:
    case 8577:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CU");
        break;
    case 5764:
    case 6305:
    case 7664:
    case 7973:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUAN");
        break;
    case 6718:
    case 6145:
    case 6393:
    case 7213:
    case 7333:
    case 7505:
    case 8631:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUI");
        break;
    case 6666:
    case 8169:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUN");
        break;
    case 5640:
    case 6547:
    case 7566:
    case 7917:
    case 7983:
    case 8078:
    case 8526:
    case 8567:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUO");
        break;
    case 6239:
    case 6353:
    case 6410:
    case 6682:
    case 7007:
    case 8155:
    case 8346:
    case 8716:
    case 8718:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DA");
        break;
    case 6004:
    case 6316:
    case 6523:
    case 6942:
    case 7110:
    case 7173:
    case 8776:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAI");
        break;
    case 5757:
    case 6144:
    case 6402:
    case 7373:
    case 7470:
    case 7781:
    case 8067:
    case 8087:
    case 8185:
    case 8376:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAN");
        break;
    case 5852:
    case 5942:
    case 6148:
    case 6920:
    case 7724:
    case 7885:
    case 8141:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DANG");
        break;
    case 6322:
    case 6665:
    case 7514:
    case 8478:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAO");
        break;
    case 7929:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DE");
        break;
    case 6466:
    case 6556:
    case 7413:
    case 7767:
    case 7975:
    case 8403:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DENG");
        break;
    case 5621:
    case 5765:
    case 5814:
    case 5848:
    case 5901:
    case 5970:
    case 6122:
    case 6454:
    case 7023:
    case 7116:
    case 7260:
    case 7306:
    case 7475:
    case 7738:
    case 7758:
    case 7791:
    case 7965:
    case 8438:
    case 8730:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DI");
        break;
    case 6439:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIA");
        break;
    case 5871:
    case 5967:
    case 6559:
    case 7172:
    case 7868:
    case 8116:
    case 8118:
    case 8401:
    case 8558:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIAN");
        break;
    case 7886:
    case 8585:
    case 8684:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIAO");
        break;
    case 5976:
    case 6006:
    case 6273:
    case 6409:
    case 7526:
    case 8012:
    case 8183:
    case 8562:
    case 8688:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIE");
        break;
    case 5674:
    case 6404:
    case 7164:
    case 7575:
    case 7754:
    case 7814:
    case 8059:
    case 8184:
    case 8490:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DING");
        break;
    case 7891:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIU");
        break;
    case 5977:
    case 6343:
    case 6520:
    case 6528:
    case 7517:
    case 7543:
    case 7556:
    case 7747:
    case 8020:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DONG");
        break;
    case 6190:
    case 8128:
    case 8229:
    case 8391:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DOU");
        break;
    case 6022:
    case 6429:
    case 6834:
    case 7292:
    case 7525:
    case 8328:
    case 8338:
    case 8739:
    case 8782:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DU");
        break;
    case 7318:
    case 7649:
    case 8393:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUAN");
        break;
    case 7701:
    case 7713:
    case 7752:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUI");
        break;
    case 6771:
    case 7632:
    case 7727:
    case 7766:
    case 7779:
    case 7970:
    case 8527:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUN");
        break;
    case 6345:
    case 6365:
    case 6785:
    case 7122:
    case 7876:
    case 8154:
    case 8566:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUO");
        break;
    case 5612:
    case 5832:
    case 5844:
    case 5949:
    case 6035:
    case 6113:
    case 6164:
    case 6332:
    case 6721:
    case 6977:
    case 7025:
    case 7378:
    case 7581:
    case 7916:
    case 7941:
    case 8042:
    case 8206:
    case 8689:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "E");
        break;
    case 6176:
    case 6284:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "EN");
        break;
    case 5706:
    case 6939:
    case 7177:
    case 7879:
    case 8025:
    case 8660:
    case 2294:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ER");
        break;
    case 5950:
    case 7732:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FA");
        break;
    case 6212:
    case 6232:
    case 6506:
    case 7283:
    case 7660:
    case 7818:
    case 8576:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FAN");
        break;
    case 5890:
    case 7242:
    case 7853:
    case 8419:
    case 8648:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FANG");
        break;
    case 6032:
    case 6584:
    case 6713:
    case 6839:
    case 6990:
    case 7119:
    case 7328:
    case 7572:
    case 7619:
    case 7673:
    case 7948:
    case 8082:
    case 8267:
    case 8385:
    case 8468:
    case 8613:
    case 8678:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FEI");
        break;
    case 5739:
    case 6915:
    case 7291:
    case 8687:
    case 8787:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FEN");
        break;
    case 5726:
    case 5926:
    case 6155:
    case 6384:
    case 6767:
    case 7731:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FENG");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FO");
        break;
    case 8330:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FOU");
        break;
    case 5775:
    case 5776:
    case 5914:
    case 6029:
    case 6062:
    case 6119:
    case 6142:
    case 6252:
    case 6327:
    case 6505:
    case 6686:
    case 6870:
    case 6985:
    case 7058:
    case 7066:
    case 7106:
    case 7108:
    case 7285:
    case 7471:
    case 7680:
    case 7741:
    case 7774:
    case 7775:
    case 7823:
    case 7991:
    case 8005:
    case 8222:
    case 8261:
    case 8280:
    case 8283:
    case 8479:
    case 8535:
    case 8538:
    case 8654:
    case 8691:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FU");
        break;
    case 6246:
    case 7056:
    case 7057:
    case 7424:
    case 7837:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GA");
        break;
    case 5604:
    case 5875:
    case 5982:
    case 7414:
    case 7464:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAI");
        break;
    case 5965:
    case 6053:
    case 6247:
    case 6306:
    case 6779:
    case 6838:
    case 6887:
    case 7104:
    case 7347:
    case 7426:
    case 7723:
    case 8065:
    case 8491:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAN");
        break;
    case 7716:
    case 7824:
    case 8364:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GANG");
        break;
    case 5626:
    case 5830:
    case 5912:
    case 6227:
    case 7141:
    case 7332:
    case 7334:
    case 7429:
    case 7915:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAO");
        break;
    case 5610:
    case 5678:
    case 5933:
    case 5957:
    case 6010:
    case 6435:
    case 7092:
    case 7501:
    case 7585:
    case 7749:
    case 7951:
    case 8143:
    case 8220:
    case 8420:
    case 8732:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GEI");
        break;
    case 5608:
    case 6102:
    case 6371:
    case 8462:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GEN");
        break;
    case 6376:
    case 6657:
    case 7114:
    case 8665:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GENG");
        break;
    case 7178:
    case 7537:
    case 8228:
    case 8601:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GONG");
        break;
    case 5694:
    case 5824:
    case 6524:
    case 6960:
    case 7037:
    case 7135:
    case 7259:
    case 7477:
    case 7616:
    case 8349:
    case 8384:
    case 8724:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GOU");
        break;
    case 5637:
    case 5812:
    case 6152:
    case 6536:
    case 6773:
    case 7284:
    case 7379:
    case 7484:
    case 7486:
    case 7591:
    case 7617:
    case 7813:
    case 7825:
    case 7860:
    case 7932:
    case 8019:
    case 8083:
    case 8233:
    case 8494:
    case 8593:
    case 8681:
    case 8729:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GU");
        break;
    case 5652:
    case 5820:
    case 6341:
    case 7273:
    case 7550:
    case 8027:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUA");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUAI");
        break;
    case 5736:
    case 6124:
    case 6272:
    case 6842:
    case 7834:
    case 8057:
    case 8170:
    case 8704:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUAN");
        break;
    case 6359:
    case 6578:
    case 7270:
    case 7555:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUANG");
        break;
    case 5648:
    case 5659:
    case 6649:
    case 7003:
    case 7277:
    case 7433:
    case 7448:
    case 8007:
    case 8394:
    case 8657:
    case 8712:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUI");
        break;
    case 5782:
    case 7121:
    case 7762:
    case 8671:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUN");
        break;
    case 5769:
    case 6266:
    case 6335:
    case 6494:
    case 6538:
    case 6603:
    case 7304:
    case 7529:
    case 8188:
    case 8268:
    case 8269:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUO");
        break;
    case 7894:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HA");
        break;
    case 6443:
    case 7560:
    case 8516:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAI");
        break;
    case 5885:
    case 6153:
    case 6294:
    case 6759:
    case 6911:
    case 7447:
    case 7642:
    case 8192:
    case 8205:
    case 8232:
    case 8793:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAN");
        break;
    case 6776:
    case 7112:
    case 8194:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HANG");
        break;
    case 6179:
    case 6222:
    case 6438:
    case 6467:
    case 6909:
    case 6916:
    case 7427:
    case 8009:
    case 8211:
    case 8226:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAO");
        break;
    case 5813:
    case 5932:
    case 5954:
    case 6432:
    case 6756:
    case 7434:
    case 7833:
    case 8202:
    case 8234:
    case 8471:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HEI");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HEN");
        break;
    case 6231:
    case 7181:
    case 7276:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HENG");
        break;
    case 5768:
    case 5774:
    case 5807:
    case 6106:
    case 6214:
    case 6216:
    case 6740:
    case 6792:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HONG");
        break;
    case 6009:
    case 6565:
    case 6943:
    case 8090:
    case 8383:
    case 8455:
    case 8655:
    case 8731:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HOU");
        break;
    case 5792:
    case 6392:
    case 6481:
    case 6518:
    case 6609:
    case 6679:
    case 6717:
    case 6816:
    case 6879:
    case 7190:
    case 7346:
    case 7385:
    case 7618:
    case 7635:
    case 7646:
    case 7670:
    case 7672:
    case 7679:
    case 8013:
    case 8032:
    case 8041:
    case 8055:
    case 8343:
    case 8513:
    case 8590:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HU");
        break;
    case 7072:
    case 7275:
    case 7725:
    case 7892:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUA");
        break;
    case 8555:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUAI");
        break;
    case 5928:
    case 6140:
    case 6307:
    case 6487:
    case 6621:
    case 6801:
    case 6829:
    case 6881:
    case 6930:
    case 6953:
    case 7157:
    case 7944:
    case 8673:
    case 8763:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUAN");
        break;
    case 5882:
    case 6569:
    case 6850:
    case 6874:
    case 6956:
    case 7211:
    case 7533:
    case 8105:
    case 8308:
    case 8382:
    case 8692:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUANG");
        break;
    case 5822:
    case 6078:
    case 6086:
    case 6205:
    case 6352:
    case 6360:
    case 6425:
    case 6736:
    case 6807:
    case 6811:
    case 6971:
    case 7132:
    case 7185:
    case 7445:
    case 7703:
    case 8219:
    case 8319:
    case 8766:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUI");
        break;
    case 5827:
    case 6638:
    case 6752:
    case 6867:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUN");
        break;
    case 5669:
    case 6229:
    case 6311:
    case 6475:
    case 6623:
    case 7856:
    case 7933:
    case 7976:
    case 8175:
    case 8322:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUO");
        break;
    case 5629:
    case 5632:
    case 5662:
    case 5705:
    case 5742:
    case 5952:
    case 6024:
    case 6033:
    case 6193:
    case 6210:
    case 6265:
    case 6320:
    case 6350:
    case 6383:
    case 6507:
    case 6553:
    case 6809:
    case 6976:
    case 7087:
    case 7160:
    case 7165:
    case 7314:
    case 7374:
    case 7410:
    case 7411:
    case 7469:
    case 7473:
    case 7487:
    case 7620:
    case 7722:
    case 7831:
    case 7990:
    case 8002:
    case 8104:
    case 8217:
    case 8337:
    case 8339:
    case 8463:
    case 8550:
    case 8611:
    case 8661:
    case 8674:
    case 8757:
    case 8768:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JI");
        break;
    case 5704:
    case 5903:
    case 6171:
    case 6521:
    case 6804:
    case 6940:
    case 7176:
    case 7409:
    case 7546:
    case 7702:
    case 7882:
    case 7956:
    case 8072:
    case 8142:
    case 8244:
    case 8353:
    case 8434:
    case 8542:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIA");
        break;
    case 5752:
    case 5841:
    case 5857:
    case 6149:
    case 6183:
    case 6286:
    case 6853:
    case 6931:
    case 6932:
    case 7144:
    case 7237:
    case 7305:
    case 7407:
    case 7415:
    case 7480:
    case 7489:
    case 7506:
    case 7576:
    case 7790:
    case 7921:
    case 8047:
    case 8148:
    case 8340:
    case 8469:
    case 8534:
    case 8561:
    case 8668:
    case 8721:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIAN");
        break;
    case 6092:
    case 6814:
    case 7113:
    case 7154:
    case 7481:
    case 7768:
    case 8180:
    case 8461:
    case 8488:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIANG");
        break;
    case 5714:
    case 5753:
    case 6020:
    case 6090:
    case 6256:
    case 6461:
    case 6572:
    case 7015:
    case 7524:
    case 8008:
    case 8052:
    case 8252:
    case 8520:
    case 8551:
    case 8662:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIAO");
        break;
    case 5806:
    case 5821:
    case 6255:
    case 6414:
    case 7028:
    case 7061:
    case 7278:
    case 7757:
    case 8060:
    case 8201:
    case 8227:
    case 8441:
    case 8658:
    case 8726:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIE");
        break;
    case 5865:
    case 6103:
    case 6132:
    case 6468:
    case 6643:
    case 6659:
    case 7138:
    case 7210:
    case 7340:
    case 7465:
    case 7478:
    case 8138:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIN");
        break;
    case 5751:
    case 5869:
    case 6128:
    case 6616:
    case 6729:
    case 6794:
    case 6941:
    case 6982:
    case 7026:
    case 7534:
    case 7554:
    case 7570:
    case 7626:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIANG");
        break;
    case 6936:
    case 7671:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIONG");
        break;
    case 5754:
    case 6417:
    case 6746:
    case 7249:
    case 7274:
    case 8015:
    case 8053:
    case 8481:
    case 8761:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIU");
        break;
    case 5738:
    case 5810:
    case 6036:
    case 6058:
    case 6076:
    case 6268:
    case 6965:
    case 6980:
    case 7202:
    case 7307:
    case 7316:
    case 7323:
    case 7357:
    case 7381:
    case 7488:
    case 7611:
    case 7850:
    case 7924:
    case 8022:
    case 8132:
    case 8153:
    case 8482:
    case 8522:
    case 8565:
    case 8620:
    case 8634:
    case 8722:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JU");
        break;
    case 5918:
    case 6590:
    case 6824:
    case 7280:
    case 7835:
    case 7935:
    case 7952:
    case 8633:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUAN");
        break;
    case 5642:
    case 5667:
    case 5860:
    case 5939:
    case 6207:
    case 6421:
    case 6457:
    case 6469:
    case 6540:
    case 6617:
    case 7062:
    case 7169:
    case 7286:
    case 7351:
    case 7663:
    case 7967:
    case 8574:
    case 8591:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUE");
        break;
    case 6260:
    case 8168:
    case 8362:
    case 8769:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUN");
        break;
    case 5671:
    case 6339:
    case 7544:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KA");
        break;
    case 5660:
    case 5978:
    case 6160:
    case 6673:
    case 6693:
    case 7888:
    case 7920:
    case 7939:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAI");
        break;
    case 5709:
    case 6108:
    case 7412:
    case 7772:
    case 7811:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAN");
        break;
    case 5688:
    case 6742:
    case 7854:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KANG");
        break;
    case 6974:
    case 7264:
    case 7491:
    case 7877:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAO");
        break;
    case 6430:
    case 6519:
    case 6701:
    case 6859:
    case 7076:
    case 7128:
    case 7170:
    case 7380:
    case 7520:
    case 7807:
    case 7861:
    case 7930:
    case 7993:
    case 8066:
    case 8129:
    case 8204:
    case 8282:
    case 8733:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KE");
        break;
    case 8144:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KEN");
        break;
    case 7912:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KENG");
        break;
    case 5737:
    case 6539:
    case 8377:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KONG");
        break;
    case 6050:
    case 6202:
    case 6321:
    case 7778:
    case 8356:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KOU");
        break;
    case 5658:
    case 6005:
    case 6423:
    case 7111:
    case 8728:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KU");
        break;
    case 5708:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUA");
        break;
    case 5665:
    case 5906:
    case 6364:
    case 6586:
    case 7558:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUAI");
        break;
    case 8737:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUAN");
        break;
    case 5818:
    case 5831:
    case 5887:
    case 5959:
    case 6237:
    case 6349:
    case 7094:
    case 7460:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUANG");
        break;
    case 5624:
    case 5649:
    case 5771:
    case 6162:
    case 6281:
    case 6413:
    case 6416:
    case 6720:
    case 6951:
    case 7450:
    case 7805:
    case 8606:
    case 8743:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUI");
        break;
    case 6204:
    case 6245:
    case 6458:
    case 6618:
    case 6928:
    case 7152:
    case 7841:
    case 8051:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIAO");
        break;
    case 5793:
    case 5988:
    case 6270:
    case 6354:
    case 6803:
    case 8483:
    case 8581:
    case 8764:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIE");
        break;
    case 6194:
    case 6388:
    case 6555:
    case 6662:
    case 6733:
    case 6964:
    case 7361:
    case 7405:
    case 7602:
    case 7812:
    case 8452:
    case 8579:
    case 8775:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIN");
        break;
    case 5925:
    case 6063:
    case 6342:
    case 6482:
    case 6786:
    case 7117:
    case 7258:
    case 7289:
    case 7418:
    case 8186:
    case 8240:
    case 8465:
    case 8676:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LING");
        break;
    case 6815:
    case 6962:
    case 7082:
    case 7124:
    case 7628:
    case 7654:
    case 7919:
    case 7954:
    case 8050:
    case 8644:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIU");
        break;
    case 5966:
    case 6055:
    case 6781:
    case 7171:
    case 7248:
    case 7542:
    case 7735:
    case 8110:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LONG");
        break;
    case 5745:
    case 6168:
    case 6422:
    case 6548:
    case 7946:
    case 8092:
    case 8179:
    case 8287:
    case 8735:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LOU");
        break;
    case 6744:
    case 7321:
    case 7586:
    case 7918:
    case 7989:
    case 8158:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LV");
        break;
    case 5968:
    case 6303:
    case 6464:
    case 6782:
    case 6843:
    case 6885:
    case 6954:
    case 7220:
    case 7251:
    case 7354:
    case 7391:
    case 7404:
    case 7510:
    case 7545:
    case 7969:
    case 8021:
    case 8056:
    case 8392:
    case 8421:
    case 8652:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LU");
        break;
    case 5785:
    case 7014:
    case 7279:
    case 8029:
    case 8639:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUAN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUN");
        break;
    case 5732:
    case 5789:
    case 6093:
    case 6259:
    case 6291:
    case 6604:
    case 6788:
    case 6880:
    case 7183:
    case 7301:
    case 7565:
    case 7961:
    case 8107:
    case 8635:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUO");
        break;
    case 6328:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "M");
        break;
    case 6373:
    case 6579:
    case 7054:
    case 7231:
    case 8301:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MA");
        break;
    case 5929:
    case 6104:
    case 8618:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAI");
        break;
    case 6012:
    case 6503:
    case 7147:
    case 7655:
    case 7960:
    case 8209:
    case 8293:
    case 8709:
    case 8720:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAN");
        break;
    case 5888:
    case 6861:
    case 7743:
    case 8294:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MANG");
        break;
    case 5783:
    case 6066:
    case 6525:
    case 6787:
    case 7203:
    case 7436:
    case 7483:
    case 7503:
    case 7624:
    case 7714:
    case 7806:
    case 8317:
    case 8754:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAO");
        break;
    case 6114:
    case 6550:
    case 6613:
    case 6828:
    case 6856:
    case 7325:
    case 7949:
    case 8044:
    case 8139:
    case 8740:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MEI");
        break;
    case 6249:
    case 7643:
    case 7715:
    case 7845:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MEN");
        break;
    case 5934:
    case 6189:
    case 6211:
    case 6734:
    case 7592:
    case 7770:
    case 8221:
    case 8276:
    case 8323:
    case 8427:
    case 8431:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MENG");
        break;
    case 5634:
    case 5855:
    case 6234:
    case 6368:
    case 6455:
    case 6608:
    case 6772:
    case 6921:
    case 6984:
    case 7563:
    case 7682:
    case 8445:
    case 8767:
    case 8771:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MI");
        break;
    case 6770:
    case 6837:
    case 6847:
    case 7579:
    case 7777:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIAN");
        break;
    case 6387:
    case 6967:
    case 7131:
    case 7149:
    case 7234:
    case 7721:
    case 7780:
    case 8037:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIAO");
        break;
    case 5631:
    case 6367:
    case 8326:
    case 8390:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIE");
        break;
    case 6069:
    case 6526:
    case 6741:
    case 6793:
    case 7137:
    case 7168:
    case 7175:
    case 7710:
    case 8710:
    case 8628:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIN");
        break;
    case 5804:
    case 6088:
    case 6873:
    case 7452:
    case 7808:
    case 8504:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MING");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIU");
        break;
    case 5851:
    case 6052:
    case 6175:
    case 6641:
    case 7038:
    case 7366:
    case 7950:
    case 7987:
    case 8102:
    case 8182:
    case 8586:
    case 8588:
    case 8765:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MO");
        break;
    case 5716:
    case 6372:
    case 7788:
    case 8254:
    case 8290:
    case 8642:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MOU");
        break;
    case 5679:
    case 5973:
    case 6057:
    case 6769:
    case 7504:
    case 7866:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MU");
        break;
    case 6437:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "N");
        break;
    case 6264:
    case 7539:
    case 7953:
    case 8136:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NA");
        break;
    case 5630:
    case 6021:
    case 6133:
    case 7245:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAI");
        break;
    case 6411:
    case 6478:
    case 6479:
    case 7310:
    case 7578:
    case 8279:
    case 8486:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAN");
        break;
    case 6313:
    case 6476:
    case 6646:
    case 7457:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NANG");
        break;
    case 5611:
    case 5981:
    case 6346:
    case 6614:
    case 7207:
    case 7748:
    case 7883:
    case 8245:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAO");
        break;
    case 5811:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NEI");
        break;
    case 7705:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NEN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NENG");
        break;
    case 5703:
    case 5972:
    case 6605:
    case 6685:
    case 7439:
    case 7627:
    case 7711:
    case 7794:
    case 7874:
    case 8682:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NI");
        break;
    case 5605:
    case 5994:
    case 7393:
    case 8004:
    case 8651:
    case 8683:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIAN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIANG");
        break;
    case 6064:
    case 7053:
    case 7569:
    case 8433:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIAO");
        break;
    case 5877:
    case 6233:
    case 6431:
    case 8208:
    case 8411:
    case 8570:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIN");
        break;
    case 5690:
    case 6344:
    case 6924:
    case 8187:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NING");
        break;
    case 6580:
    case 6678:
    case 7004:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIU");
        break;
    case 5715:
    case 6370:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NONG");
        break;
    case 8181:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NOU");
        break;
    case 6983:
    case 7032:
    case 7059:
    case 7069:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NU");
        break;
    case 7704:
    case 7847:
    case 8412:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NV");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUAN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUE");
        break;
    case 5748:
    case 6289:
    case 6386:
    case 7927:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUO");
        break;
    case 6424:
    case 6462:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "O");
        break;
    case 5809:
    case 6670:
    case 7417:
    case 8178:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "OU");
        break;
    case 6166:
    case 7243:
    case 8365:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PA");
        break;
    case 5729:
    case 6169:
    case 6363:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAI");
        break;
    case 6761:
    case 6790:
    case 8140:
    case 8165:
    case 8320:
    case 8571:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAN");
        break;
    case 6561:
    case 6872:
    case 6944:
    case 8306:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PANG");
        break;
    case 6243:
    case 6583:
    case 6650:
    case 7567:
    case 8069:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAO");
        break;
    case 6446:
    case 6490:
    case 7623:
    case 7934:
    case 8512:
    case 8612:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PEI");
        break;
    case 6852:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PEN");
        break;
    case 6001:
    case 6456:
    case 6681:
    case 8318:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PENG");
        break;
    case 5607:
    case 5682:
    case 5880:
    case 5892:
    case 5915:
    case 5960:
    case 6017:
    case 6037:
    case 6308:
    case 6472:
    case 6647:
    case 6836:
    case 7039:
    case 7102:
    case 7233:
    case 7422:
    case 7802:
    case 7828:
    case 7875:
    case 8117:
    case 8166:
    case 8223:
    case 8271:
    case 8589:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PI");
        break;
    case 5850:
    case 7073:
    case 7490:
    case 7561:
    case 8470:
    case 8568:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIAN");
        break;
    case 5666:
    case 6449:
    case 7046:
    case 7146:
    case 7372:
    case 7809:
    case 8310:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIAO");
        break;
    case 6054:
    case 7513:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIE");
        break;
    case 7041:
    case 6253:
    case 7016:
    case 7315:
    case 7482:
    case 8213:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIN");
        break;
    case 5723:
    case 7019:
    case 7250:
    case 8650:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PING");
        break;
    case 5647:
    case 5922:
    case 7174:
    case 7839:
    case 7862:
    case 8011:
    case 8345:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PO");
        break;
    case 5786:
    case 6269:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "POU");
        break;
    case 5773:
    case 6459:
    case 6863:
    case 6907:
    case 7217:
    case 7511:
    case 7968:
    case 7972:
    case 8575:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PU");
        break;
    case 5633:
    case 5725:
    case 5963:
    case 6027:
    case 6046:
    case 6089:
    case 6129:
    case 6134:
    case 6161:
    case 6213:
    case 6366:
    case 6450:
    case 6508:
    case 6510:
    case 6764:
    case 6831:
    case 7075:
    case 7118:
    case 7187:
    case 7189:
    case 7229:
    case 7271:
    case 7342:
    case 7440:
    case 7605:
    case 7687:
    case 7712:
    case 7751:
    case 8193:
    case 8251:
    case 8264:
    case 8475:
    case 8476:
    case 8572:
    case 8702:
    case 8772:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QI");
        break;
    case 6154:
    case 8736:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIA");
        break;
    case 5727:
    case 5761:
    case 5868:
    case 6023:
    case 6045:
    case 6071:
    case 6271:
    case 6509:
    case 6705:
    case 6727:
    case 6925:
    case 6926:
    case 6929:
    case 7155:
    case 7293:
    case 7541:
    case 7709:
    case 7852:
    case 8215:
    case 8373:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIAN");
        break;
    case 6762:
    case 7045:
    case 7341:
    case 7408:
    case 7633:
    case 7926:
    case 7947:
    case 7974:
    case 8163:
    case 8262:
    case 8439:
    case 8536:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIANG");
        break;
    case 5668:
    case 5829:
    case 5859:
    case 6081:
    case 6529:
    case 6724:
    case 6730:
    case 7352:
    case 7745:
    case 8546:
    case 8719:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIAO");
        break;
    case 5907:
    case 6711:
    case 7010:
    case 7492:
    case 7938:
    case 8370:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIE");
        break;
    case 6043:
    case 6276:
    case 6336:
    case 6426:
    case 6463:
    case 6858:
    case 7353:
    case 7923:
    case 8291:
    case 8432:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIN");
        break;
    case 6060:
    case 6485:
    case 7349:
    case 7764:
    case 8263:
    case 8332:
    case 8368:
    case 8605:
    case 8675:
    case 8784:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QING");
        break;
    case 5886:
    case 6068:
    case 8123:
    case 8243:
    case 8344:
    case 8528:
    case 8638:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIONG");
        break;
    case 5720:
    case 5947:
    case 6576:
    case 6848:
    case 6947:
    case 6957:
    case 7317:
    case 7468:
    case 8216:
    case 8239:
    case 8288:
    case 8435:
    case 8460:
    case 8690:
    case 8792:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIU");
        break;
    case 5816:
    case 5930:
    case 6201:
    case 6230:
    case 6511:
    case 6573:
    case 6754:
    case 7219:
    case 7479:
    case 7512:
    case 7552:
    case 7678:
    case 7765:
    case 8119:
    case 8248:
    case 8329:
    case 8480:
    case 8636:
    case 8781:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QU");
        break;
    case 5825:
    case 6085:
    case 6710:
    case 7125:
    case 7390:
    case 7816:
    case 7893:
    case 8273:
    case 8360:
    case 8760:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUAN");
        break;
    case 6755:
    case 6758:
    case 7708:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUE");
        break;
    case 6950:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUN");
        break;
    case 6059:
    case 8237:
    case 8755:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RAN");
        break;
    case 7692:
    case 8006:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RANG");
        break;
    case 6073:
    case 7012:
    case 7267:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RAO");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RE");
        break;
    case 5680:
    case 6083:
    case 6156:
    case 6631:
    case 7377:
    case 7994:
    case 8137:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "REN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RENG");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RI");
        break;
    case 6541:
    case 6585:
    case 7337:
    case 7532:
    case 8278:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RONG");
        break;
    case 8459:
    case 8569:
    case 8723:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ROU");
        break;
    case 6174:
    case 6224:
    case 6473:
    case 6818:
    case 6865:
    case 6906:
    case 7140:
    case 7908:
    case 8164:
    case 8212:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RU");
        break;
    case 7535:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUAN");
        break;
    case 6039:
    case 6208:
    case 7236:
    case 7803:
    case 8224:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUI");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUN");
        break;
    case 5728:
    case 8372:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUO");
        break;
    case 5606:
    case 5677:
    case 7493:
    case 7559:
    case 7610:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SA");
        break;
    case 6471:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAI");
        break;
    case 6644:
    case 7507:
    case 8454:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAN");
        break;
    case 6290:
    case 7763:
    case 8210:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SANG");
        break;
    case 6003:
    case 7150:
    case 7156:
    case 7593:
    case 8094:
    case 8694:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAO");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SEN");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SENG");
        break;
    case 6394:
    case 7606:
    case 7901:
    case 8080:
    case 8436:
    case 8614:
    case 8672:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHA");
        break;
    case 8507:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAI");
        break;
    case 5663:
    case 5808:
    case 5923:
    case 5979:
    case 6047:
    case 6890:
    case 7009:
    case 7051:
    case 7083:
    case 7594:
    case 7844:
    case 8062:
    case 8321:
    case 8414:
    case 8539:
    case 8713:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAN");
        break;
    case 5980:
    case 7120:
    case 7368:
    case 7656:
    case 8592:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUANG");
        break;
    case 5931:
    case 6070:
    case 6891:
    case 7228:
    case 8366:
    case 8425:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAO");
        break;
    case 5639:
    case 5760:
    case 6606:
    case 6860:
    case 7608:
    case 7820:
    case 8774:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHE");
        break;
    case 5837:
    case 6123:
    case 6351:
    case 6841:
    case 7309:
    case 7547:
    case 7982:
    case 8255:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHEN");
        break;
    case 6551:
    case 7441:
    case 7782:
    case 8347:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHENG");
        break;
    case 5854:
    case 5985:
    case 6110:
    case 6173:
    case 6317:
    case 7388:
    case 7459:
    case 7634:
    case 7870:
    case 8307:
    case 8334:
    case 8363:
    case 8525:
    case 8669:
    case 8685:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHI");
        break;
    case 6587:
    case 7123:
    case 8428:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHOU");
        break;
    case 5731:
    case 5951:
    case 6136:
    case 6283:
    case 6780:
    case 6888:
    case 7013:
    case 7508:
    case 7582:
    case 7988:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHU");
        break;
    case 6407:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUA");
        break;
    case 8316:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUAI");
        break;
    case 6737:
    case 6844:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUAN");
        break;
    case 7055:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUANG");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUI");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUN");
        break;
    case 6184:
    case 6287:
    case 6989:
    case 7335:
    case 7869:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUO");
        break;
    case 5643:
    case 5778:
    case 5944:
    case 6348:
    case 6765:
    case 6784:
    case 6889:
    case 7006:
    case 7065:
    case 7133:
    case 7675:
    case 7940:
    case 8024:
    case 8174:
    case 8247:
    case 8351:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SI");
        break;
    case 5801:
    case 6131:
    case 6534:
    case 6552:
    case 6676:
    case 6704:
    case 6833:
    case 8121:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SONG");
        break;
    case 5937:
    case 6220:
    case 6418:
    case 6453:
    case 6640:
    case 6849:
    case 7612:
    case 7804:
    case 7943:
    case 8284:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SOU");
        break;
    case 5777:
    case 5853:
    case 6188:
    case 6428:
    case 6726:
    case 6819:
    case 8389:
    case 8602:
    case 8653:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SU");
        break;
    case 6601:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUAN");
        break;
    case 5839:
    case 6120:
    case 6901:
    case 6968:
    case 7661:
    case 7785:
    case 7801:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUI");
        break;
    case 6105:
    case 6588:
    case 6624:
    case 7330:
    case 8632:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUN");
        break;
    case 6379:
    case 6434:
    case 6442:
    case 7022:
    case 7288:
    case 7792:
    case 8440:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUO");
        break;
    case 6743:
    case 6866:
    case 6961:
    case 7329:
    case 7719:
    case 7872:
    case 8533:
    case 8703:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TA");
        break;
    case 5902:
    case 6223:
    case 6330:
    case 7070:
    case 7536:
    case 7638:
    case 7849:
    case 8544:
    case 8656:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAI");
        break;
    case 5916:
    case 6903:
    case 7428:
    case 7694:
    case 7867:
    case 7936:
    case 8191:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAN");
        break;
    case 5746:
    case 6491:
    case 6871:
    case 7209:
    case 7344:
    case 7906:
    case 7959:
    case 8177:
    case 8305:
    case 8311:
    case 8442:
    case 8517:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TANG");
        break;
    case 5627:
    case 6391:
    case 6812:
    case 7226:
    case 7666:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAO");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "1845 餐");
        break;
    case 6315:
    case 7693:
    case 7911:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TE");
        break;
    case 7588:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TENG");
        break;
    case 5735:
    case 6709:
    case 6949:
    case 7130:
    case 8035:
    case 8151:
    case 8514:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TI");
        break;
    case 6261:
    case 6735:
    case 6757:
    case 7369:
    case 7817:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIAN");
        break;
    case 5712:
    case 7686:
    case 8127:
    case 8272:
    case 8352:
    case 8448:
    case 8622:
    case 8670:
    case 8756:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIAO");
        break;
    case 6138:
    case 8749:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIE");
        break;
    case 6080:
    case 6167:
    case 7035:
    case 7272:
    case 7890:
    case 8249:
    case 8610:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TING");
        break;
    case 5701:
    case 5758:
    case 6077:
    case 6444:
    case 6690:
    case 6892:
    case 7737:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TONG");
        break;
    case 7855:
    case 7822:
    case 8727:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TOU");
        break;
    case 6002:
    case 6117:
    case 6143:
    case 7842:
    case 8509:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TU");
        break;
    case 6250:
    case 6972:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUAN");
        break;
    case 7653:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUI");
        break;
    case 5759:
    case 6629:
    case 7453:
    case 7564:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUN");
        break;
    case 5617:
    case 5702:
    case 5971:
    case 6653:
    case 6791:
    case 7256:
    case 7262:
    case 7350:
    case 7740:
    case 8374:
    case 8502:
    case 8541:
    case 8630:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUO");
        break;
    case 5684:
    case 7020:
    case 7580:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WA");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WAI");
        break;
    case 5664:
    case 6025:
    case 6150:
    case 7093:
    case 7126:
    case 7194:
    case 7568:
    case 7821:
    case 8274:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WAN");
        break;
    case 5672:
    case 6244:
    case 6715:
    case 7394:
    case 8745:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WANG");
        break;
    case 5743:
    case 5835:
    case 5881:
    case 5883:
    case 6158:
    case 6217:
    case 6488:
    case 6501:
    case 6543:
    case 6545:
    case 6611:
    case 6612:
    case 6739:
    case 6777:
    case 6802:
    case 6822:
    case 6952:
    case 7024:
    case 7166:
    case 7224:
    case 7406:
    case 7631:
    case 7648:
    case 8084:
    case 8426:
    case 8659:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WEI");
        break;
    case 5656:
    case 6751:
    case 6775:
    case 7223:
    case 8609:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WEN");
        break;
    case 6178:
    case 6219:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WENG");
        break;
    case 5733:
    case 6111:
    case 6502:
    case 6855:
    case 7531:
    case 7750:
    case 8627:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WO");
        break;
    case 5603:
    case 5685:
    case 5867:
    case 5889:
    case 5956:
    case 6044:
    case 6377:
    case 6648:
    case 6668:
    case 6672:
    case 6820:
    case 6927:
    case 6935:
    case 6992:
    case 7036:
    case 7080:
    case 7227:
    case 7485:
    case 7641:
    case 8036:
    case 8045:
    case 8077:
    case 8258:
    case 8640:
    case 8789:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WU");
        break;
    case 5750:
    case 5766:
    case 5884:
    case 5913:
    case 6130:
    case 6163:
    case 6191:
    case 6241:
    case 6381:
    case 6567:
    case 6630:
    case 6750:
    case 6827:
    case 6832:
    case 6979:
    case 7050:
    case 7184:
    case 7356:
    case 7456:
    case 7474:
    case 7604:
    case 7668:
    case 7689:
    case 7691:
    case 8010:
    case 8122:
    case 8265:
    case 8303:
    case 8312:
    case 8410:
    case 8424:
    case 8443:
    case 8449:
    case 8466:
    case 8521:
    case 8791:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XI");
        break;
    case 6340:
    case 6582:
    case 6958:
    case 7206:
    case 7252:
    case 7744:
    case 8093:
    case 8333:
    case 8779:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIA");
        break;
    case 5794:
    case 5823:
    case 6040:
    case 6118:
    case 6226:
    case 6513:
    case 6593:
    case 6963:
    case 7021:
    case 7515:
    case 7662:
    case 7676:
    case 8034:
    case 8079:
    case 8225:
    case 8358:
    case 8444:
    case 8503:
    case 8548:
    case 8549:
    case 8617:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIAN");
        break;
    case 6028:
    case 6157:
    case 6635:
    case 6652:
    case 7088:
    case 7129:
    case 8313:
    case 8663:
    case 8747:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIANG");
        break;
    case 6356:
    case 6537:
    case 6876:
    case 6948:
    case 7071:
    case 7115:
    case 7241:
    case 7253:
    case 8257:
    case 8367:
    case 8379:
    case 8744:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIAO");
        break;
    case 5741:
    case 5784:
    case 5936:
    case 5938:
    case 6215:
    case 6302:
    case 6619:
    case 6661:
    case 6845:
    case 6912:
    case 6966:
    case 7105:
    case 7151:
    case 7331:
    case 7339:
    case 8583:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIE");
        break;
    case 5622:
    case 6016:
    case 7431:
    case 7607:
    case 8646:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIN");
        break;
    case 5874:
    case 6084:
    case 6309:
    case 6712:
    case 7742:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XING");
        break;
    case 6026:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIONG");
        break;
    case 6361:
    case 6522:
    case 6642:
    case 6651:
    case 6869:
    case 8028:
    case 8587:
    case 8759:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIU");
        break;
    case 5828:
    case 5935:
    case 5955:
    case 6203:
    case 6810:
    case 6851:
    case 7179:
    case 7282:
    case 7667:
    case 7776:
    case 8167:
    case 8458:
    case 8515:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XU");
        break;
    case 5756:
    case 5846:
    case 6170:
    case 6279:
    case 6789:
    case 6854:
    case 6886:
    case 7215:
    case 7324:
    case 7449:
    case 7637:
    case 7651:
    case 7759:
    case 7871:
    case 7964:
    case 8071:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUAN");
        break;
    case 5842:
    case 7720:
    case 8529:
    case 8708:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUE");
        break;
    case 5767:
    case 5908:
    case 5987:
    case 6087:
    case 6101:
    case 6206:
    case 6225:
    case 6530:
    case 6563:
    case 6620:
    case 6694:
    case 6813:
    case 6817:
    case 7454:
    case 8131:
    case 8524:
    case 8664:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUN");
        break;
    case 5683:
    case 5975:
    case 6275:
    case 6512:
    case 6934:
    case 7011:
    case 7180:
    case 7266:
    case 7518:
    case 7728:
    case 7793:
    case 8073:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YA");
        break;
    case 5641:
    case 5645:
    case 5718:
    case 5740:
    case 5780:
    case 5861:
    case 5917:
    case 5919:
    case 6030:
    case 6146:
    case 6535:
    case 6691:
    case 6738:
    case 6753:
    case 6846:
    case 6857:
    case 6991:
    case 7044:
    case 7192:
    case 7360:
    case 7444:
    case 7557:
    case 7645:
    case 7827:
    case 8359:
    case 8506:
    case 8742:
    case 8748:
    case 8790:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YAN");
        break;
    case 6564:
    case 6683:
    case 7630:
    case 7640:
    case 7706:
    case 8253:
    case 8717:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YANG");
        break;
    case 5618:
    case 5619:
    case 6326:
    case 6542:
    case 6570:
    case 7159:
    case 7182:
    case 7235:
    case 7387:
    case 7455:
    case 7540:
    case 7902:
    case 8046:
    case 8126:
    case 8477:
    case 8705:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YAO");
        break;
    case 5644:
    case 5843:
    case 5894:
    case 6262:
    case 7442:
    case 7639:
    case 7884:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YE");
        break;
    case 5655:
    case 5657:
    case 5670:
    case 5693:
    case 5711:
    case 5817:
    case 5961:
    case 5992:
    case 6018:
    case 6051:
    case 6072:
    case 6218:
    case 6236:
    case 6240:
    case 6258:
    case 6314:
    case 6329:
    case 6355:
    case 6362:
    case 6441:
    case 6470:
    case 6527:
    case 6558:
    case 6602:
    case 6634:
    case 6688:
    case 6689:
    case 6708:
    case 6884:
    case 6938:
    case 7068:
    case 7143:
    case 7376:
    case 7383:
    case 7461:
    case 7629:
    case 7658:
    case 7784:
    case 7838:
    case 7955:
    case 7978:
    case 8074:
    case 8089:
    case 8115:
    case 8120:
    case 8270:
    case 8415:
    case 8464:
    case 8472:
    case 8493:
    case 8780:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YI");
        break;
    case 5623:
    case 5920:
    case 5983:
    case 6007:
    case 6065:
    case 6337:
    case 6419:
    case 6594:
    case 6625:
    case 6806:
    case 7519:
    case 7887:
    case 8111:
    case 8230:
    case 8615:
    case 8624:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YIN");
        break;
    case 5788:
    case 5911:
    case 6067:
    case 6094:
    case 6126:
    case 6151:
    case 6186:
    case 6292:
    case 6451:
    case 6663:
    case 6862:
    case 6875:
    case 6913:
    case 7188:
    case 7212:
    case 7326:
    case 7584:
    case 8048:
    case 8108:
    case 8203:
    case 8331:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YING");
        break;
    case 6401:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YO");
        break;
    case 5724:
    case 5953:
    case 6013:
    case 6415:
    case 6728:
    case 7163:
    case 7962:
    case 8014:
    case 8711:
    case 8751:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YONG");
        break;
    case 5653:
    case 5692:
    case 5707:
    case 6112:
    case 6115:
    case 6121:
    case 6347:
    case 6483:
    case 6922:
    case 7254:
    case 7364:
    case 7527:
    case 7880:
    case 8064:
    case 8236:
    case 8242:
    case 8286:
    case 8647:
    case 8778:
    case 8788:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YOU");
        break;
    case 5614:
    case 5625:
    case 5681:
    case 5722:
    case 5836:
    case 5845:
    case 6139:
    case 6187:
    case 6277:
    case 6484:
    case 6486:
    case 6546:
    case 6592:
    case 6632:
    case 6637:
    case 6655:
    case 6748:
    case 6987:
    case 6993:
    case 7005:
    case 7090:
    case 7204:
    case 7437:
    case 7476:
    case 7573:
    case 7603:
    case 7622:
    case 7647:
    case 7659:
    case 7718:
    case 7858:
    case 8033:
    case 8054:
    case 8085:
    case 8086:
    case 8130:
    case 8133:
    case 8266:
    case 8285:
    case 8336:
    case 8407:
    case 8408:
    case 8607:
    case 8625:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YU");
        break;
    case 5989:
    case 6011:
    case 6282:
    case 6768:
    case 7034:
    case 7205:
    case 7358:
    case 7528:
    case 7783:
    case 8016:
    case 8302:
    case 8378:
    case 8629:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUAN");
        break;
    case 5763:
    case 6914:
    case 7348:
    case 7530:
    case 7865:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUE");
        break;
    case 5909:
    case 6031:
    case 6581:
    case 6702:
    case 6719:
    case 7101:
    case 7225:
    case 7370:
    case 7432:
    case 7521:
    case 7657:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUN");
        break;
    case 6257:
    case 6338:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZA");
        break;
    case 6544:
    case 7162:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAI");
        break;
    case 7222:
    case 7435:
    case 8402:
    case 8456:
    case 8485:
    case 8641:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAN");
        break;
    case 6242:
    case 7064:
    case 7416:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZANG");
        break;
    case 6380:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAO");
        break;
    case 5638:
    case 8369:
    case 5651:
    case 6385:
    case 6493:
    case 6937:
    case 7430:
    case 8348:
    case 8423:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZE");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZEI");
        break;
    case 5858:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZEN");
        break;
    case 7153:
    case 7421:
    case 7832:
    case 7913:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZENG");
        break;
    case 6610:
    case 6274:
    case 6324:
    case 6369:
    case 6378:
    case 7736:
    case 8068:
    case 8238:
    case 8794:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHA");
        break;
    case 7746:
    case 8109:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAI");
        break;
    case 5862:
    case 6288:
    case 7625:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAN");
        break;
    case 5675:
    case 5921:
    case 6504:
    case 6554:
    case 6615:
    case 7049:
    case 7216:
    case 8315:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHANG");
        break;
    case 5815:
    case 7294:
    case 7840:
    case 8341:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAO");
        break;
    case 5856:
    case 6301:
    case 7247:
    case 7392:
    case 7761:
    case 8049:
    case 8162:
    case 8256:
    case 8487:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHE");
        break;
    case 5958:
    case 6172:
    case 6805:
    case 7139:
    case 7269:
    case 7327:
    case 7384:
    case 7466:
    case 7551:
    case 7562:
    case 7685:
    case 7819:
    case 8001:
    case 8018:
    case 8380:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHEN");
        break;
    case 5826:
    case 6531:
    case 6571:
    case 7859:
    case 7903:
    case 8361:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHENG");
        break;
    case 5620:
    case 5876:
    case 5904:
    case 5990:
    case 6038:
    case 6293:
    case 6489:
    case 6669:
    case 6973:
    case 6975:
    case 7079:
    case 7246:
    case 7255:
    case 7257:
    case 7268:
    case 7382:
    case 7389:
    case 7462:
    case 7553:
    case 7589:
    case 7677:
    case 7683:
    case 7773:
    case 7984:
    case 8026:
    case 8075:
    case 8246:
    case 8474:
    case 8505:
    case 8537:
    case 8557:
    case 8560:
    case 8584:
    case 8603:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHI");
        break;
    case 5803:
    case 7981:
    case 8314:
    case 8417:
    case 8564:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHONG");
        break;
    case 6107:
    case 6390:
    case 7008:
    case 7091:
    case 7107:
    case 7548:
    case 7756:
    case 8406:
    case 8492:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHOU");
        break;
    case 5689:
    case 5710:
    case 5905:
    case 6049:
    case 6079:
    case 6808:
    case 6830:
    case 6883:
    case 7244:
    case 7338:
    case 7345:
    case 7636:
    case 7889:
    case 8070:
    case 8081:
    case 8335:
    case 8371:
    case 8422:
    case 8467:
    case 8578:
    case 8770:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHU");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUA");
        break;
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUAI");
        break;
    case 6389:
    case 6645:
    case 8207:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUAN");
        break;
    case 5755:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUANG");
        break;
    case 6723:
    case 7077:
    case 7136:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUI");
        break;
    case 7538:
    case 8124:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUN");
        break;
    case 5730:
    case 5834:
    case 6310:
    case 6823:
    case 6835:
    case 6910:
    case 7644:
    case 7690:
    case 7729:
    case 7977:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUO");
        break;
    case 5849:
    case 6549:
    case 7002:
    case 7060:
    case 7127:
    case 7287:
    case 7402:
    case 7463:
    case 7707:
    case 7786:
    case 7937:
    case 7986:
    case 8172:
    case 8342:
    case 8450:
    case 8484:
    case 8594:
    case 8604:
    case 8623:
    case 8686:
    case 8758:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZI");
        break;
    case 5744:
    case 7574:
    case 8453:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZONG");
        break;
    case 5833:
    case 5878:
    case 5924:
    case 7067:
    case 8677:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZOU");
        break;
    case 5762:
    case 6147:
    case 7963:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZU");
        break;
    case 6312:
    case 7158:
    case 8582:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUAN");
        break;
    case 6209:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUI");
        break;
    case 6304:
    case 7355:
    case 8714:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUN");
        break;
    case 5872:
    case 6382:
    case 6460:
    case 6684:
    case 7549:
    case 7681:
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUO");
        break;
    default:
        if (nCode >= 1601 && nCode <= 1602) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "A");
            break;
        }
        if (nCode >= 1603 && nCode <= 1615) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "AI");
            break;
        }
        if (nCode >= 1616 && nCode <= 1624) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "AN");
            break;
        }
        if (nCode >= 1625 && nCode <= 1627) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ANG");
            break;
        }
        if (nCode >= 1628 && nCode <= 1636) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "AO");
            break;
        }
        if (nCode >= 1637 && nCode <= 1654) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BA");
            break;
        }
        if (nCode >= 1655 && nCode <= 1662) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BAI");
            break;
        }
        if (nCode >= 1663 && nCode <= 1677) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BAN");
            break;
        }
        if (nCode >= 1678 && nCode <= 1689) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BANG");
            break;
        }
        if (nCode >= 1690 && nCode <= 1712) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BAO");
            break;
        }
        if (nCode >= 1713 && nCode <= 1727) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BEI");
            break;
        }
        if (nCode >= 1728 && nCode <= 1731) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BEN");
            break;
        }
        if (nCode >= 1732 && nCode <= 1737) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BENG");
            break;
        }
        if (nCode > 1738 && nCode <= 1761) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BI");
            break;
        }
        if (nCode >= 1762 && nCode <= 1773) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BIAN");
            break;
        }
        if (nCode >= 1774 && nCode <= 1777) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BIAO");
            break;
        }
        if (nCode >= 1778 && nCode <= 1781) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BIE");
            break;
        }
        if (nCode >= 1782 && nCode <= 1787) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BIN");
            break;
        }
        if (nCode >= 1788 && nCode <= 1794) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BING");
            break;
        }
        if (nCode >= 1801 && nCode <= 1802) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BING");
            break;
        }
        if (nCode >= 1803 && nCode <= 1821) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BO");
            break;
        }
        if (nCode >= 1822 && nCode <= 1832) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "BU");
            break;
        }
        if (nCode == 1833) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CA");
            break;
        }
        if (nCode >= 1834 && nCode <= 1844) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CAI");
            break;
        }
        if (nCode >= 1845 && nCode <= 1851) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CAN");
            break;
        }
        if (nCode >= 1852 && nCode <= 1856) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CANG");
            break;
        }
        if (nCode >= 1857 && nCode <= 1861) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CAO");
            break;
        }
        if (nCode >= 1862 && nCode <= 1866) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CE");
            break;
        }
        if (nCode >= 1867 && nCode <= 1868) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CENG");
            break;
        }
        if (nCode >= 1869 && nCode <= 1879) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHA");
            break;
        }
        if (nCode >= 1880 && nCode <= 1882) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHAI");
            break;
        }
        if (nCode >= 1883 && nCode <= 1892) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHAN");
            break;
        }
        if (nCode >= 1893 && nCode <= 1911) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHANG");
            break;
        }
        if (nCode >= 1912 && nCode <= 1920) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHAO");
            break;
        }
        if (nCode >= 1921 && nCode <= 1926) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHE");
            break;
        }
        if (nCode >= 1927 && nCode <= 1936) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHEN");
            break;
        }
        if (nCode >= 1937 && nCode <= 1951) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHENG");
            break;
        }
        if (nCode >= 1952 && nCode <= 1967) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHI");
            break;
        }
        if (nCode >= 1968 && nCode <= 1972) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHONG");
            break;
        }
        if (nCode >= 1973 && nCode <= 1984) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHOU");
            break;
        }
        if (nCode >= 1985 && nCode <= 2006) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHU");
            break;
        }
        if (nCode == 2007) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUAI");
            break;
        }
        if (nCode >= 2008 && nCode <= 2014) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUAN");
            break;
        }
        if (nCode >= 2015 && nCode <= 2020) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUANG");
            break;
        }
        if (nCode >= 2021 && nCode <= 2025) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUI");
            break;
        }
        if (nCode >= 2026 && nCode <= 2032) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUN");
            break;
        }
        if (nCode >= 2033 && nCode <= 2034) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CHUO");
            break;
        }
        if (nCode >= 2035 && nCode <= 2046) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CI");
            break;
        }
        if (nCode >= 2047 && nCode <= 2052) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CONG");
            break;
        }
        if (nCode >= 2054 && nCode <= 2057) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CU");
            break;
        }
        if (nCode >= 2058 && nCode <= 2060) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUAN");
            break;
        }
        if (nCode >= 2061 && nCode <= 2068) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUI");
            break;
        }
        if (nCode >= 2069 && nCode <= 2071) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUN");
            break;
        }
        if (nCode >= 2072 && nCode <= 2077) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "CUO");
            break;
        }
        if (nCode >= 2078 && nCode <= 2083) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DA");
            break;
        }
        if (nCode >= 2084 && nCode <= 2094) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAI");
            break;
        }
        if (nCode >= 2102 && nCode <= 2116) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAN");
            break;
        }
        if (nCode >= 2117 && nCode <= 2121) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DANG");
            break;
        }
        if (nCode >= 2122 && nCode <= 2133) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DAO");
            break;
        }
        if (nCode >= 2134 && nCode <= 2136) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DE");
            break;
        }
        if (nCode >= 2137 && nCode <= 2143) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DENG");
            break;
        }
        if (nCode >= 2144 && nCode <= 2162) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DI");
            break;
        }
        if (nCode >= 2163 && nCode <= 2178) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIAN");
            break;
        }
        if (nCode >= 2179 && nCode <= 2187) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIAO");
            break;
        }
        if (nCode >= 2188 && nCode <= 2194) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIE");
            break;
        }
        if (nCode >= 2201 && nCode <= 2209) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DING");
            break;
        }
        if (nCode == 2210) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DIU");
            break;
        }
        if (nCode >= 2211 && nCode <= 2220) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DONG");
            break;
        }
        if (nCode >= 2221 && nCode <= 2227) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DOU");
            break;
        }
        if (nCode >= 2228 && nCode <= 2242) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DU");
            break;
        }
        if (nCode >= 2243 && nCode <= 2248) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUAN");
            break;
        }
        if (nCode >= 2249 && nCode <= 2252) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUI");
            break;
        }
        if (nCode >= 2253 && nCode <= 2261) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUN");
            break;
        }
        if (nCode >= 2262 && nCode <= 2273) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "DUO");
            break;
        }
        if (nCode >= 2274 && nCode <= 2286) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "E");
            break;
        }
        if (nCode == 2287) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "EN");
            break;
        }
        if (nCode >= 2288 && nCode <= 2231) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ER");
            break;
        }
        if (nCode >= 2302 && nCode <= 2309) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FA");
            break;
        }
        if (nCode >= 2310 && nCode <= 2326) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FAN");
            break;
        }
        if (nCode >= 2327 && nCode <= 2337) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FANG");
            break;
        }
        if (nCode >= 2338 && nCode <= 2349) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FEI");
            break;
        }
        if (nCode >= 2350 && nCode <= 2364) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FEN");
            break;
        }
        if (nCode >= 2365 && nCode <= 2379) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FENG");
            break;
        }
        if (nCode == 2380) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FO");
            break;
        }
        if (nCode == 2381) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FOU");
            break;
        }
        if (nCode >= 2382 && nCode <= 2432) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "FU");
            break;
        }
        if (nCode >= 2435 && nCode <= 2440) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAI");
            break;
        }
        if (nCode >= 2441 && nCode <= 2451) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAN");
            break;
        }
        if (nCode >= 2452 && nCode <= 2460) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GANG");
            break;
        }
        if (nCode >= 2461 && nCode <= 2470) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GAO");
            break;
        }
        if (nCode >= 2471 && nCode <= 2487) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GE");
            break;
        }
        if (nCode == 2488) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GEI");
            break;
        }
        if (nCode >= 2489 && nCode <= 2490) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GEN");
            break;
        }
        if (nCode >= 2491 && nCode <= 2503) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GENG");
            break;
        }
        if (nCode >= 2504 && nCode <= 2518) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GONG");
            break;
        }
        if (nCode >= 2519 && nCode <= 2527) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GOU");
            break;
        }
        if (nCode >= 2528 && nCode <= 2545) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GU");
            break;
        }
        if (nCode >= 2546 && nCode <= 2551) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUA");
            break;
        }
        if (nCode >= 2552 && nCode <= 2554) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUAI");
            break;
        }
        if (nCode >= 2555 && nCode <= 2565) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUAN");
            break;
        }
        if (nCode >= 2566 && nCode <= 2568) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUANG");
            break;
        }
        if (nCode >= 2569 && nCode <= 2584) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUI");
            break;
        }
        if (nCode >= 2585 && nCode <= 2587) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUN");
            break;
        }
        if (nCode >= 2588 && nCode <= 2593) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "GUO");
            break;
        }
        if (nCode == 2594) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HA");
            break;
        }
        if (nCode >= 2601 && nCode <= 2607) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAI");
            break;
        }
        if (nCode >= 2608 && nCode <= 2626) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAN");
            break;
        }
        if (nCode >= 2627 && nCode <= 2629) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HANG");
            break;
        }
        if (nCode >= 2630 && nCode <= 2638) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HAO");
            break;
        }
        if (nCode >= 2639 && nCode <= 2656) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HE");
            break;
        }
        if (nCode >= 2657 && nCode <= 2658) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HEI");
            break;
        }
        if (nCode >= 2659 && nCode <= 2662) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HEN");
            break;
        }
        if (nCode >= 2663 && nCode <= 2667) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HENG");
            break;
        }
        if (nCode >= 2668 && nCode <= 2676) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HONG");
            break;
        }
        if (nCode >= 2677 && nCode <= 2683) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HOU");
            break;
        }
        if (nCode >= 2684 && nCode <= 2707) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HU");
            break;
        }
        if (nCode >= 2708 && nCode <= 2716) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUA");
            break;
        }
        if (nCode >= 2717 && nCode <= 2721) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUAI");
            break;
        }
        if (nCode >= 2722 && nCode <= 2735) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUAN");
            break;
        }
        if (nCode >= 2736 && nCode <= 2749) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUANG");
            break;
        }
        if (nCode >= 2750 && nCode <= 2770) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUI");
            break;
        }
        if (nCode >= 2771 && nCode <= 2776) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUN");
            break;
        }
        if (nCode >= 2777 && nCode <= 2786) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "HUO");
            break;
        }
        if (nCode >= 2787 && nCode <= 2845) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JI");
            break;
        }
        if (nCode >= 2846 && nCode <= 2862) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIA");
            break;
        }
        if (nCode >= 2863 && nCode <= 2908) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIAN");
            break;
        }
        if (nCode >= 2909 && nCode <= 2921) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIANG");
            break;
        }
        if (nCode >= 2922 && nCode <= 2949) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIAO");
            break;
        }
        if (nCode >= 2950 && nCode <= 2976) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIE");
            break;
        }
        if (nCode >= 2977 && nCode <= 3002) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIN");
            break;
        }
        if (nCode >= 3003 && nCode <= 3027) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JING");
            break;
        }
        if (nCode >= 3028 && nCode <= 3029) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIONG");
            break;
        }
        if (nCode >= 3030 && nCode <= 3046) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JIU");
            break;
        }
        if (nCode >= 3047 && nCode <= 3071) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JU");
            break;
        }
        if (nCode >= 3072 && nCode <= 3078) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUAN");
            break;
        }
        if (nCode >= 3079 && nCode <= 3088) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUE");
            break;
        }
        if (nCode >= 3089 && nCode <= 3105) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "JUN");
            break;
        }
        if (nCode >= 3106 && nCode <= 3109) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KA");
            break;
        }
        if (nCode >= 3110 && nCode <= 3114) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAI");
            break;
        }
        if (nCode >= 3115 && nCode <= 3120) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAN");
            break;
        }
        if (nCode >= 3121 && nCode <= 3127) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KANG");
            break;
        }
        if (nCode >= 3128 && nCode <= 3131) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KAO");
            break;
        }
        if (nCode >= 3132 && nCode <= 3146) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KE");
            break;
        }
        if (nCode >= 3147 && nCode <= 3150) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KEN");
            break;
        }
        if (nCode >= 3151 && nCode <= 3152) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KENG");
            break;
        }
        if (nCode >= 3153 && nCode <= 3156) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KONG");
            break;
        }
        if (nCode >= 3157 && nCode <= 3160) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KOU");
            break;
        }
        if (nCode >= 3161 && nCode <= 3167) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KU");
            break;
        }
        if (nCode >= 3168 && nCode <= 3172) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUA");
            break;
        }
        if (nCode >= 3173 && nCode <= 3176) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUAI");
            break;
        }
        if (nCode >= 3177 && nCode <= 3178) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUAN");
            break;
        }
        if (nCode >= 3179 && nCode <= 3186) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUANG");
            break;
        }
        if (nCode >= 3187 && nCode <= 3203) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUI");
            break;
        }
        if (nCode >= 3204 && nCode <= 3207) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUN");
            break;
        }
        if (nCode >= 3208 && nCode <= 3211) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "KUO");
            break;
        }
        if (nCode >= 3212 && nCode <= 3218) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LA");
            break;
        }
        if (nCode >= 3219 && nCode <= 3221) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LAI");
            break;
        }
        if (nCode >= 3222 && nCode <= 3236) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LAN");
            break;
        }
        if (nCode >= 3237 && nCode <= 3243) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LANG");
            break;
        }
        if (nCode >= 3244 && nCode <= 3252) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LAO");
            break;
        }
        if (nCode >= 3253 && nCode <= 3254) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LE");
            break;
        }
        if (nCode >= 3255 && nCode <= 3265) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LEI");
            break;
        }
        if (nCode >= 3266 && nCode <= 3268) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LENG");
            break;
        }
        if (nCode >= 3269 && nCode <= 3308) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LI");
            break;
        }
        if (nCode == 3309) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIA");
            break;
        }
        if (nCode >= 3310 && nCode <= 3323) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIAN");
            break;
        }
        if (nCode >= 3324 && nCode <= 3334) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIANG");
            break;
        }
        if (nCode >= 3335 && nCode <= 3347) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIAO");
            break;
        }
        if (nCode >= 3348 && nCode <= 3352) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIE");
            break;
        }
        if (nCode >= 3353 && nCode <= 3363) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIN");
            break;
        }
        if (nCode >= 3364 && nCode <= 3378) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LING");
            break;
        }
        if (nCode >= 3379 && nCode <= 3389) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LIU");
            break;
        }
        if (nCode >= 3390 && nCode <= 3404) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LONG");
            break;
        }
        if (nCode >= 3405 && nCode <= 3410) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LOU");
            break;
        }
        if (nCode >= 3411 && nCode <= 3444) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LU");
            break;
        }
        if (nCode >= 3445 && nCode <= 3450) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUAN");
            break;
        }
        if (nCode >= 3451 && nCode <= 3452) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUE");
            break;
        }
        if (nCode >= 3453 && nCode <= 3459) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUN");
            break;
        }
        if (nCode >= 3460 && nCode <= 3471) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "LUO");
            break;
        }
        if (nCode >= 3472 && nCode <= 3480) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MA");
            break;
        }
        if (nCode >= 3481 && nCode <= 3486) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAI");
            break;
        }
        if (nCode >= 3487 && nCode <= 3501) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAN");
            break;
        }
        if (nCode >= 3502 && nCode <= 3507) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MANG");
            break;
        }
        if (nCode >= 3508 && nCode <= 3519) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MAO");
            break;
        }
        if (nCode == 3520) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ME");
            break;
        }
        if (nCode >= 3521 && nCode <= 3536) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MEI");
            break;
        }
        if (nCode >= 3537 && nCode <= 3539) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MEN");
            break;
        }
        if (nCode >= 3540 && nCode <= 3547) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MENG");
            break;
        }
        if (nCode >= 3548 && nCode <= 3561) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MI");
        }
        if (nCode >= 3562 && nCode <= 3570) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIAN");
            break;
        }
        if (nCode >= 3571 && nCode <= 3578) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIAO");
            break;
        }
        if (nCode >= 3579 && nCode <= 3580) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIE");
            break;
        }
        if (nCode >= 3581 && nCode <= 3586) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIN");
            break;
        }
        if (nCode >= 3587 && nCode <= 3592) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MING");
            break;
        }
        if (nCode == 3593) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MIU");
            break;
        }
        if (nCode >= 3594 && nCode <= 3616) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MO");
            break;
        }
        if (nCode >= 3617 && nCode <= 3619) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MOU");
            break;
        }
        if (nCode >= 3620 && nCode <= 3634) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "MU");
            break;
        }
        if (nCode >= 3635 && nCode <= 3641) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NA");
            break;
        }
        if (nCode >= 3642 && nCode <= 3646) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAI");
            break;
        }
        if (nCode >= 3647 && nCode <= 3649) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAN");
            break;
        }
        if (nCode == 3650) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NANG");
            break;
        }
        if (nCode >= 3651 && nCode <= 3655) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NAO");
            break;
        }
        if (nCode == 3656) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NE");
            break;
        }
        if (nCode >= 3657 && nCode <= 3658) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NEI");
            break;
        }
        if (nCode == 3659) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NEN");
            break;
        }
        if (nCode == 3660) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NENG");
            break;
        }
        if (nCode >= 3661 && nCode <= 3671) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NI");
            break;
        }
        if (nCode >= 3672 && nCode <= 3678) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIAN");
            break;
        }
        if (nCode >= 3679 && nCode <= 3680) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIANG");
            break;
        }
        if (nCode >= 3681 && nCode <= 3682) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIAO");
            break;
        }
        if (nCode >= 3683 && nCode <= 3689) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIE");
            break;
        }
        if (nCode == 3690) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIN");
            break;
        }
        if (nCode >= 3691 && nCode <= 3702) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NING");
            break;
        }
        if (nCode >= 3703 && nCode <= 3706) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NIU");
            break;
        }
        if (nCode >= 3707 && nCode <= 3710) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NONG");
            break;
        }
        if (nCode >= 3711 && nCode <= 3714) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NU");
            break;
        }
        if (nCode == 3715) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUAN");
            break;
        }
        if (nCode >= 3716 && nCode <= 3717) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUE");
            break;
        }
        if (nCode >= 3718 && nCode <= 3721) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "NUO");
            break;
        }
        if (nCode == 3722) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "O");
            break;
        }
        if (nCode >= 3723 && nCode <= 3729) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "OU");
            break;
        }
        if (nCode >= 3730 && nCode <= 3735) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PA");
            break;
        }
        if (nCode >= 3736 && nCode <= 3741) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAI");
            break;
        }
        if (nCode >= 3742 && nCode <= 3749) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAN");
            break;
        }
        if (nCode >= 3750 && nCode <= 3754) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PANG");
            break;
        }
        if (nCode >= 3755 && nCode <= 3761) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PAO");
            break;
        }
        if (nCode >= 3762 && nCode <= 3770) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PEI");
            break;
        }
        if (nCode >= 3771 && nCode <= 3772) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PEN");
            break;
        }
        if (nCode >= 3773 && nCode <= 3786) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PENG");
            break;
        }
        if (nCode >= 3787 && nCode <= 3809) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PI");
            break;
        }
        if (nCode >= 3810 && nCode <= 3813) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIAN");
            break;
        }
        if (nCode >= 3814 && nCode <= 3817) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIAO");
            break;
        }
        if (nCode >= 3818 && nCode <= 3819) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIE");
            break;
        }
        if (nCode >= 3820 && nCode <= 3824) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PIN");
            break;
        }
        if (nCode >= 3825 && nCode <= 3833) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PING");
            break;
        }
        if (nCode >= 3834 && nCode <= 3841) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PO");
            break;
        }
        if (nCode == 3842) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "POU");
            break;
        }
        if (nCode >= 3843 && nCode <= 3857) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "PU");
            break;
        }
        if (nCode >= 3858 && nCode <= 3893) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QI");
            break;
        }
        if (nCode == 3894 || nCode >= 3901 && nCode <= 3902) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIA");
            break;
        }
        if (nCode >= 3903 && nCode <= 3924) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIAN");
            break;
        }
        if (nCode >= 3925 && nCode <= 3932) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIANG");
            break;
        }
        if (nCode >= 3933 && nCode <= 3947) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIAO");
            break;
        }
        if (nCode >= 3948 && nCode <= 3952) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIE");
            break;
        }
        if (nCode >= 3953 && nCode <= 3963) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIN");
            break;
        }
        if (nCode >= 3964 && nCode <= 3976) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QING");
            break;
        }
        if (nCode >= 3977 && nCode <= 3978) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIONG");
            break;
        }
        if (nCode >= 3979 && nCode <= 3986) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QIU");
            break;
        }
        if (nCode >= 3987 && nCode <= 4005) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QU");
            break;
        }
        if (nCode >= 4006 && nCode <= 4016) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUAN");
            break;
        }
        if (nCode >= 4017 && nCode <= 4024) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUE");
            break;
        }
        if (nCode >= 4025 && nCode <= 4026) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "QUN");
            break;
        }
        if (nCode >= 4027 && nCode <= 4030) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RAN");
            break;
        }
        if (nCode >= 4031 && nCode <= 4035) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RANG");
        }
        if (nCode >= 4036 && nCode <= 4038) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RAO");
            break;
        }
        if (nCode >= 4039 && nCode <= 4040) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RE");
            break;
        }
        if (nCode >= 4041 && nCode <= 4050) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "REN");
            break;
        }
        if (nCode >= 4051 && nCode <= 4052) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RENG");
            break;
        }
        if (nCode == 4053) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RI");
            break;
        }
        if (nCode >= 4054 && nCode <= 4063) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RONG");
            break;
        }
        if (nCode >= 4064 && nCode <= 4066) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ROU");
            break;
        }
        if (nCode >= 4067 && nCode <= 4076) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RU");
            break;
        }
        if (nCode >= 4077 && nCode <= 4078) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUAN");
            break;
        }
        if (nCode >= 4079 && nCode <= 4081) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUI");
            break;
        }
        if (nCode >= 4082 && nCode <= 4083) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUN");
            break;
        }
        if (nCode >= 4084 && nCode <= 4085) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "RUO");
            break;
        }
        if (nCode >= 4086 && nCode <= 4088) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SA");
            break;
        }
        if (nCode >= 4089 && nCode <= 4092) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAI");
            break;
        }
        if (nCode >= 4093 && nCode <= 4094) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAN");
            break;
        }
        if (nCode >= 4101 && nCode <= 4102) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAN");
            break;
        }
        if (nCode >= 4103 && nCode <= 4105) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SANG");
            break;
        }
        if (nCode >= 4106 && nCode <= 4109) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SAO");
            break;
        }
        if (nCode >= 4110 && nCode <= 4112) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SE");
            break;
        }
        if (nCode == 4113) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SEN");
        }
        if (nCode == 4114) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SENG");
            break;
        }
        if (nCode >= 4115 && nCode <= 4123) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHA");
            break;
        }
        if (nCode >= 4124 && nCode <= 4125) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAI");
            break;
        }
        if (nCode >= 4126 && nCode <= 4141) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAN");
            break;
        }
        if (nCode >= 4142 && nCode <= 4149) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHANG");
            break;
        }
        if (nCode >= 4150 && nCode <= 4160) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHAO");
            break;
        }
        if (nCode >= 4161 && nCode <= 4172) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHE");
            break;
        }
        if (nCode >= 4173 && nCode <= 4188) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHEN");
            break;
        }
        if (nCode >= 4189 && nCode <= 4205) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHENG");
            break;
        }
        if (nCode >= 4206 && nCode <= 4252) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHI");
            break;
        }
        if (nCode >= 4253 && nCode <= 4262) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHOU");
            break;
        }
        if (nCode >= 4263 && nCode <= 4301) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHU");
            break;
        }
        if (nCode >= 4302 && nCode <= 4303) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUA");
            break;
        }
        if (nCode >= 4304 && nCode <= 4307) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUAI");
            break;
        }
        if (nCode >= 4308 && nCode <= 4309) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUAN");
            break;
        }
        if (nCode >= 4310 && nCode <= 4312) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUANG");
            break;
        }
        if (nCode >= 4313 && nCode <= 4316) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUI");
            break;
        }
        if (nCode >= 4317 && nCode <= 4320) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUN");
            break;
        }
        if (nCode >= 4321 && nCode <= 4324) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SHUO");
            break;
        }
        if (nCode >= 4325 && nCode <= 4340) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SI");
            break;
        }
        if (nCode >= 4341 && nCode <= 4348) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SONG");
            break;
        }
        if (nCode >= 4349 && nCode <= 4352) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SOU");
            break;
        }
        if (nCode >= 4353 && nCode <= 4364) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SU");
            break;
        }
        if (nCode >= 4365 && nCode <= 4367) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUAN");
            break;
        }
        if (nCode >= 4368 && nCode <= 4378) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUI");
            break;
        }
        if (nCode >= 4379 && nCode <= 4381) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUN");
            break;
        }
        if (nCode >= 4382 && nCode <= 4389) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "SUO");
            break;
        }
        if (nCode >= 4390 && nCode <= 4404) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TA");
            break;
        }
        if (nCode >= 4405 && nCode <= 4413) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAI");
            break;
        }
        if (nCode >= 4414 && nCode <= 4431) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAN");
            break;
        }
        if (nCode >= 4432 && nCode <= 4444) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TANG");
            break;
        }
        if (nCode >= 4445 && nCode <= 4455) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TAO");
            break;
        }
        if (nCode == 4456) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TE");
            break;
        }
        if (nCode >= 4457 && nCode <= 4460) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TENG");
            break;
        }
        if (nCode >= 4461 && nCode <= 4475) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TI");
            break;
        }
        if (nCode >= 4476 && nCode <= 4483) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIAN");
            break;
        }
        if (nCode >= 4484 && nCode <= 4488) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIAO");
            break;
        }
        if (nCode >= 4489 && nCode <= 4491) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TIE");
            break;
        }
        if (nCode >= 4492 && nCode <= 4507) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TING");
            break;
        }
        if (nCode >= 4508 && nCode <= 4520) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TONG");
            break;
        }
        if (nCode >= 4521 && nCode <= 4524) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TOU");
            break;
        }
        if (nCode >= 4525 && nCode <= 4535) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TU");
            break;
        }
        if (nCode >= 4536 && nCode <= 4537) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUAN");
            break;
        }
        if (nCode >= 4538 && nCode <= 4543) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUI");
            break;
        }
        if (nCode >= 4544 && nCode <= 4546) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUN");
            break;
        }
        if (nCode >= 4547 && nCode <= 4557) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "TUO");
            break;
        }
        if (nCode >= 4558 && nCode <= 4564) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WA");
            break;
        }
        if (nCode >= 4565 && nCode <= 4566) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WAI");
            break;
        }
        if (nCode >= 4567 && nCode <= 4583) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WAN");
            break;
        }
        if (nCode >= 4584 && nCode <= 4593) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WANG");
            break;
        }
        if (nCode >= 4594 && nCode <= 4632) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WEI");
            break;
        }
        if (nCode >= 4633 && nCode <= 4642) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WEN");
            break;
        }
        if (nCode >= 4643 && nCode <= 4645) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WENG");
            break;
        }
        if (nCode >= 4646 && nCode <= 4654) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WO");
            break;
        }
        if (nCode >= 4655 && nCode <= 4683) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "WU");
            break;
        }
        if (nCode >= 4684 && nCode <= 4724) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XI");
            break;
        }
        if (nCode >= 4725 && nCode <= 4737) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIA");
            break;
        }
        if (nCode >= 4738 && nCode <= 4763) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIAN");
            break;
        }
        if (nCode >= 4764 && nCode <= 4783) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIANG");
            break;
        }
        if (nCode >= 4784 && nCode <= 4807) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIAO");
            break;
        }
        if (nCode >= 4809 && nCode <= 4828) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIE");
            break;
        }
        if (nCode >= 4829 && nCode <= 4838) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIN");
            break;
        }
        if (nCode >= 4839 && nCode <= 4853) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XING");
            break;
        }
        if (nCode >= 4854 && nCode <= 4860) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIONG");
            break;
        }
        if (nCode >= 4861 && nCode <= 4869) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XIU");
            break;
        }
        if (nCode >= 4870 && nCode <= 4888) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XU");
            break;
        }
        if (nCode >= 4889 && nCode <= 4904) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUAN");
            break;
        }
        if (nCode >= 4905 && nCode <= 4910) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUE");
            break;
        }
        if (nCode >= 4911 && nCode <= 4924) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "XUN");
            break;
        }
        if (nCode >= 4925 && nCode <= 4940) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YA");
            break;
        }
        if (nCode >= 4941 && nCode <= 4973) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YAN");
            break;
        }
        if (nCode >= 4974 && nCode <= 4990) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YANG");
            break;
        }
        if (nCode >= 4991 && nCode <= 5011) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YAO");
            break;
        }
        if (nCode >= 5012 && nCode <= 5026) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YE");
            break;
        }
        if (nCode >= 5027 && nCode <= 5079) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YI");
            break;
        }
        if (nCode >= 5080 && nCode <= 5101) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YIN");
            break;
        }
        if (nCode >= 5102 && nCode <= 5119) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YING");
            break;
        }
        if (nCode == 5120) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YO");
            break;
        }
        if (nCode >= 5121 && nCode <= 5135) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YONG");
            break;
        }
        if (nCode >= 5136 && nCode <= 5155) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YOU");
            break;
        }
        if (nCode >= 5156 && nCode <= 5206) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YU");
            break;
        }
        if (nCode >= 5207 && nCode <= 5226) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUAN");
            break;
        }
        if (nCode >= 5227 && nCode <= 5236) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUE");
            break;
        }
        if (nCode >= 5237 && nCode <= 5248) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "YUN");
            break;
        }
        if (nCode >= 5249 && nCode <= 5251) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZA");
            break;
        }
        if (nCode >= 5252 && nCode <= 5258) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAI");
            break;
        }
        if (nCode >= 5259 && nCode <= 5262) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAN");
            break;
        }
        if (nCode >= 5263 && nCode <= 5265) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZANG");
            break;
        }
        if (nCode >= 5266 && nCode <= 5279) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZAO");
            break;
        }
        if (nCode >= 5280 && nCode <= 5283) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZE");
            break;
        }
        if (nCode == 5284) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZEI");
            break;
        }
        if (nCode == 5285) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZEN");
            break;
        }
        if (nCode >= 5286 && nCode <= 5289) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZENG");
            break;
        }
        if (nCode >= 5290 && nCode <= 5309) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHA");
            break;
        }
        if (nCode >= 5310 && nCode <= 5315) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAI");
            break;
        }
        if (nCode >= 5316 && nCode <= 5332) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAN");
            break;
        }
        if (nCode >= 5333 && nCode <= 5347) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHANG");
            break;
        }
        if (nCode >= 5348 && nCode <= 5357) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHAO");
            break;
        }
        if (nCode >= 5358 && nCode <= 5367) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHE");
            break;
        }
        if (nCode >= 5368 && nCode <= 5383) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHEN");
            break;
        }
        if (nCode >= 5384 && nCode <= 5404) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHENG");
            break;
        }
        if (nCode >= 5405 && nCode <= 5447) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHI");
            break;
        }
        if (nCode >= 5448 && nCode <= 5458) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHONG");
            break;
        }
        if (nCode >= 5459 && nCode <= 5472) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHOU");
            break;
        }
        if (nCode >= 5473 && nCode <= 5504) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHU");
            break;
        }
        if (nCode >= 5505 && nCode <= 5506) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUA");
            break;
        }
        if (nCode == 5507) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUAI");
            break;
        }
        if (nCode >= 5508 && nCode <= 5513) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUAN");
            break;
        }
        if (nCode >= 5514 && nCode <= 5520) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUANG");
            break;
        }
        if (nCode >= 5521 && nCode <= 5526) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUI");
            break;
        }
        if (nCode >= 5527 && nCode <= 5528) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUN");
            break;
        }
        if (nCode >= 5529 && nCode <= 5539) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZHUO");
            break;
        }
        if (nCode >= 5540 && nCode <= 5554) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZI");
            break;
        }
        if (nCode >= 5555 && nCode <= 5561) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZONG");
            break;
        }
        if (nCode >= 5562 && nCode <= 5565) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZOU");
            break;
        }
        if (nCode >= 5566 && nCode <= 5573) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZU");
            break;
        }
        if (nCode >= 5574 && nCode <= 5575) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUAN");
            break;
        }
        if (nCode >= 5576 && nCode <= 5579) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUI");
            break;
        }
        if (nCode >= 5580 && nCode <= 5581) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUN");
            break;
        }
        if (nCode >= 5582 && nCode <= 5589) {
            strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "ZUO");
            break;
        }
        strcpy_s(strValue, HZ2PY_MAX_PINYIN_SIZE, "?");
        return 0;
    }
    return 1;
}

int CCendPinyinDataSearch::is_utf8_string(char *utf)
{
    int length = strlen(utf);
    int check_sub = 0;
    int i = 0;

    if ( length > HZ2PY_UTF8_CHECK_LENGTH ) //只取前面特定长度的字符来验证即可
    {
        length = HZ2PY_UTF8_CHECK_LENGTH;
    }

    for ( ; i < length; i ++ )
    {
        if ( check_sub == 0 )
        {
            if ( (utf[i] >> 7) == 0 )           //0xxx xxxx
            {
                continue;
            }
            else if ( (utf[i] & 0xE0) == 0xC0 ) //110x xxxx
            {
                check_sub = 1;
            }
            else if ( (utf[i] & 0xF0) == 0xE0 ) //1110 xxxx
            {
                check_sub = 2;
            }
            else if ( (utf[i] & 0xF8) == 0xF0 ) //1111 0xxx
            {
                check_sub = 3;
            }
            else if ( (utf[i] & 0xFC) == 0xF8 ) //1111 10xx
            {
                check_sub = 4;
            }
            else if ( (utf[i] & 0xFE) == 0xFC ) //1111 110x
            {
                check_sub = 5;
            }
            else
            {
                return 0;
            }
        }
        else
        {
            if ( (utf[i] & 0xC0) != 0x80 )
            {
                return 0;
            }
            check_sub --;
        }
    }
    return 1;
}

void CCendPinyinDataSearch::testData()
{
    char inbuf[1000] = "平阳路龙城大街龙瑞苑小区刘峰峰收";
    char * outbuf = new char[HZ2PY_OUTPUT_BUF_ARRAY_SIZE];
    memset(outbuf, '\0', sizeof(char) * HZ2PY_OUTPUT_BUF_ARRAY_SIZE);
    if (is_utf8_string(inbuf)) {
        printf("utf8:");
        pinyin_utf8(inbuf, outbuf);
    } else {
        printf("gb2312:");
        pinyin_gb2312(inbuf, outbuf, false, false, true, true, true);
    }
    printf("%s\n", outbuf);

    qDebug() << "123123 pinyin" << outbuf;

}

 头文件


#ifndef C_CEND_PINYIN_DATA_SEARCH_H
#define C_CEND_PINYIN_DATA_SEARCH_H

#include <QWidget>
#include <QMap>
#include <QGuiApplication>
#include <string>
#include <Qdebug>
#include <QTextCodec>
using std::string;

//gbk转unicode

//QTextCodec* gbk = QTextCodec::codecForName("gbk");

//StrData = gbk->toUnicode(StrData.toStdString().data());


//unicode转uft-8
//QTextCodec* utf8 = QTextCodec::codecForName("UTF-8");

//StrData = utf8->fromUnicode(strData, tostdstring().data());

class CCendPinyinDataSearch : public QWidget
{
	Q_OBJECT

public:
	/**
	* @breif  : 构造
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @param  : QObject * parent
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	CCendPinyinDataSearch(QWidget* parent = nullptr);

	/**
	* @breif  : 析构
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	~CCendPinyinDataSearch();

	/**
	* @breif  : 塞入索引数据
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	void insertSearchIndex(int,QString);

	/**
	* @breif  : 获取索引数据
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	void getSeachIndexList(QString);

	/**
	* @breif  : 获取搜索 索引结果集
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	QStringList getSeachListData();

	/**
	* @breif  : 包含当前拼音中函数
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	bool isContainsAllCharacters(const std::string& mainString, const std::string& subString);

	/**
	* @breif  : 获取中文转拼音
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	QString chineseConvertPinYinAllSpell(QString dest_chinese,bool isUtf8);

private:

	/**
	* @breif  : 数据转换
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	bool safeAddToOutbuf(char* outbuf,int &iOutbuf,char* pinyinValue,int iPinyinValue);

	/**
	* @breif  : 拼音转utf8
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	void pinyin_utf8(char* inbuf,char* outbuf, bool m_blnSimaple=false,bool polyphone_support=false,bool m_blnFirstBig=false,bool m_blnAllBiG=false,bool m_LetterEnd=false, bool m_unknowSkip=true,bool m_filterPunc=true);

	/**
	* @breif  : 拼音转gb2312
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	void pinyin_gb2312(char * inbuf, char * outbuf, bool m_blnSimaple = false, bool polyphone_support = false, bool m_blnFirstBig = false, bool m_blnAllBiG = false, bool m_LetterEnd = false, bool m_unknowSkip = true, bool m_filterPunc = true);
 
	/**
	* @breif  : 查找对应的值
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	int findLetter(int nCode, char* strValue);  

	/**
	* @breif  : 判断是否 utf8
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	int is_utf8_string(char *utf);

	/**
	* @breif  : 测试数据
	* @author : Liufengfeng
	* @email  : 407621563@qq.com
	* @return :
	* @date   : 2023/11/07 11:29
	*/
	void testData();

private:

	// 检索索引
	QMap<int,QString> m_pSearchIndex;

	QStringList m_pSearchIndexList;
};

#endif //C_CEND_PINYIN_DATA_SEARCH_H

参考代码

C++ 解决string转为char*中文乱码问题_char* 中文乱码-CSDN博客

突破编程_C++_字符串算法(判断字符串是否包含)_c++判断字符串是否含有某字符串-CSDN博客

汉字转拼音c/c++源码,支持gb2312和utf8_汉字转拼音 c++-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值