汉字生成拼音首字母

来源:互联网 发布:js 按键事件 编辑:程序博客网 时间:2024/04/28 15:45

这是一个汉字生成拼音首字母的函数,非常好用,哪位高手解释一下1,2,3,4,5处的意义:  
  static   public   string   getSpell(string   cnChar)  
  {  
          byte[]   arrCN   =   System.Text.Encoding.Default.GetBytes(cnChar);  
          if(arrCN.Length   >   1)  
          {  
              //1,(short)arrCN[0]是什么意思?  
                int   area   =   (short)arrCN[0];  
              //2,(short)arrCN[1]是什么意思?  
                int   pos   =   (short)arrCN[1];  
              //3,(area<<8)   +   pos是什么意思?  
                int   code   =   (area<<8)   +   pos;  
                int[]   areacode   =  {45217,45253,45761,46318,46826,47010,47297,47614,48119,48119,49062,49324,49896,50371,50614,50622,50906,51387,51446,52218,52698,52698,52698,52980,53689,54481}; 
  for(int   i=0;i<26;i++)  
  {  
            int   max   =   55290;  
            if(i   !=   25)   max   =   areacode[i+1];  
  //4,为什么要areacode[i]<=code   &&   code<max?  
                            if(areacode[i]<=code   &&   code<max)  
            {  
              //5,new   byte[]{(byte)(65+i)}是什么意思?  
  return   System.Text.Encoding.Default.GetString(new   byte[]{(byte)(65+i)});  
        }  
    }  
  return   cnChar;  
          }  
          else   return   cnChar;  
  }

 

//1,(short)arrCN[0]   byte数组第一个元素转为short型整数,区码  
                int   area   =   (short)arrCN[0];  
              //2,(short)arrCN[1]   byte数组第二个元素转为short型整数,位码  
                int   pos   =   (short)arrCN[1];  
              //3,(area<<8)   +   pos       区码左移8位加位码得到编码  
                int   code   =   (area<<8)   +   pos;  
   
  //4   确定编码范围(根据数组中定义的常量)  
                            if(areacode[i]<=code   &&   code<max)  
            {  
              //5,new   byte[]{(byte)(65+i)}   65是字母A的编码,加一个偏移量i得到A-Z的字母,转为byte  
  return   System.Text.Encoding.Default.GetString(new   byte[]{(byte)(65+i)});

 

//5,new   byte[]{(byte)(65+i)}   65是字母A的编码,加一个偏移量i得到A-Z的字母编码,转为byte,据此编码得到字符