this.治疗完毕

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 
区位码、国标码与机内码的转换关系 
1)区位码先转换成十六进制数表示 
(2)(区位码的十六进制表示)+2020H=国标码; 
(3)国标码+8080H=机内码 
举例:以汉字“大”为例,“大”字的区内码为2083 
1、区号为20,位号为83 
2、将区位号2083转换为十六进制表示为1453H 
3、1453H+2020H=3473H,得到国标码3473H 
4、3473H+8080H=B4F3H,得到机内码为B4F3H
 
常用汉字在16-55区,其中55区有几个空的,故要将其去除.
      /// <summary>
        /// 随机产生常用汉字
        /// </summary>
        /// <param name="count">要产生汉字的个数</param>
        /// <returns>常用汉字</returns>
        private List<string> GenerateChineseWords(int count)
        {
            List<string> chineseWords = new List<string>();
            Random rm = new Random();
            Encoding gb=Encoding.GetEncoding("gb2312");

            for (int i = 0; i < count; i++)
            {
                // 获取区码(常用汉字的区码范围为16-55)
                int regionCode = rm.Next(16, 56);
                // 获取位码(位码范围为1-94 由于55区的90,91,92,93,94为空,故将其排除)
                int positionCode;
                if (regionCode == 55)
                {
                    // 55区排除90,91,92,93,94
                    positionCode = rm.Next(1, 90);
                }
                else
                {
                    positionCode = rm.Next(1, 95);
                }

                // 转换区位码为机内码
                int regionCode_Machine = regionCode + 160;// 160即为十六进制的20H+80H=A0H
                int positionCode_Machine = positionCode + 160;// 160即为十六进制的20H+80H=A0H

                // 转换为汉字
                byte[] bytes = new byte[] { (byte)regionCode_Machine, (byte)positionCode_Machine };
                chineseWords.Add(gb.GetString(bytes));
            }

            return chineseWords;
        }

 

posted on 2018-05-31 18:36  this.治疗完毕  阅读(214)  评论(0)    收藏  举报