C# 汉字转拼音首字母大写

我们在手机上经常都能看到通过拼音缩写来搜索好友信息,那么它是如何将一段汉字转换为首字母大写呢

首先我们来了解一下中文在计算机中的结构。计算机识别的是字节,字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。而汉字在编码中都有自己专属的位置,比如说“A”开头的汉字【啊、阿】,它们的位置在45217 到 45252 之间(包括两端),那么我们就可以通过这个区间来对汉字进行分类,在45217 到 45252 之间就属于A,同理在45253 到 45760 之间的汉字就属于B。

 private static string GetSpellCode(string CnChar)
 {
      long iCnChar;
      byte[] arrCN = System.Text.Encoding.Default.GetBytes(CnChar);
	  //将传进来的参数转换为byte格式的,如果是英文字母,它的长度应该为1
	  //如果是中文,那它的长度应该是2	
      //如果是字母,则直接返回
      if (arrCN.Length == 1)
      {
          CnChar = CnChar.ToUpper();
      } 
      else
      {
      	  //是中文的话,长度就为2,分别接收到它的两个字节码
          int area = (short)arrCN[0];
          int pos = (short)arrCN[1];
          //【<<】是位运算符,向左移动8位
          iCnChar = (area << 8) + pos;

在这里用到了【<<】这个运算符,【<<】是位运算符中的左移运算符

它的作用是把一个整型数的所有位向左移动指定的位数,移动到左边界之外的多余二进制位会被丢弃,并从右边界移入0。左移运算的两个操作数应为整数类型。第一个操作数是要进行移位操作的数,第二个操作数指定第一个操作数移动的位数。如果第二个操作数等于0则不发生任何移位。

接下来我们就可以声明一个数组,将所有的区间放进去。

	//声明字母字符串已经对应位置的区间数组
 	 string letter = "ABCDEFGHJKLMNOPQRSTWXYZ";
     int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614,
             48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906,
             51387, 51446, 52218, 52698, 52980, 53689, 54481, 55290 };
       for (int i = 0; i < 23; i++)
       {
       	//通过循环对比得到区间的位置,然后提取出相应位置的字母
           if (areacode[i] <= iCnChar && iCnChar < areacode[i + 1])
           {
               CnChar = letter.Substring(i, 1);
               break;
           }
           else
           {
           	//如果无法识别(不在区间内,比如说¥、%、&等特殊符号)
           	//就将它统一归类为【#】
               CnChar = "#";
           }
       }
   }
   return CnChar;
}

之后再写个方法调用它,为了实现多汉字的转换,我们还需要再写一个循环,依次对汉字词语进行转换再拼接

   public static string GetFirstCode(string CnStr)
   {
       string strTemp = "";
       int iLen = CnStr.Length;
       //获取到字符串的长度
       //通过循环,一次得到每个汉字的拼音首字母缩写
       int i = 0;
       for (i = 0; i <= iLen - 1; i++)
       {
       		//拼接返回结果
           strTemp += GetSpellCode(CnStr.Substring(i, 1));
       }
       return strTemp;
   }

测试一下效果
在这里插入图片描述

返回值
在这里插入图片描述

你可能感兴趣的:(专题技术文献)