【C#Winforms】汉字编码<>汉字,汉字区位码<>汉字,ASCII码 Charles

【汉字编码】算法:
      1,获取Encoding对象(参数:编码-gb2312)
      2,通过该对象,获取字节数组
      3,将第一个字节左移位(<<8),并强制转换为int
      4,将的得到的数据与强制转换后的第二个字节相加
可以用相反的方法从【汉字编码】还原到【汉字】

【汉字区位码】算法:
       1,获取自己数组(同上)
       2,将第一个字节强制转换后-160 转换成 字符串
       3,将第二个字节强制转换后-160 转换成字符串
       4,将2,3得到的字符串相加,即得到区位码
使用相反的方法从【汉字区位码】 还原到 【汉字】

附:【键盘符号ASCII编码】算法
       1,获取unicode编码的字节数组的第1个字节即可(byte[0]);

下面是汉字区位码的获取程序:
(汉字区位码,就是日常我们考试时需要填写的名字对应的那一段数字)
(对应算法看程序更容易理解)
  
private void btn_Get_Code_Click(object sender, EventArgs e)
        {
            string s_chinese = this.txb_chinese.Text;
            byte[] code = Encoding.Default.GetBytes(s_chinese);
            short front = (short)(code[0] - '\0'); //这里(short)code[0]也是可以的
            short back = (short)(code[1] - '\0');
            string codes = (front - 160).ToString() + (back - 160).ToString();
            this.txb_code.Text = codes;
        }
以上程序来自明日开发实例1200例中的一段代码,下面的代码通过反向推导实现区位码到汉字的转换:

        private void btn_retchinese_Click(object sender, EventArgs e)
        {
            int P_chicode = int.Parse(this.txb_code.Text);
            int front = P_chicode / 100;
            int back = P_chicode % 100;
            front += 160;
            back += 160;
            byte[] mbyte = new byte[2] {(byte)front, (byte)back };
            string chinese = Encoding.Default.GetString(mbyte);
            this.txb_rchinese.Text = chinese;
        }

        相比之下,java似乎更简洁一点:String chinese=new String(mbyte,"GB2312");这样就获取到了 区位码 对应的 汉字。

原文地址:https://www.cnblogs.com/shenchaoming/p/2264553.html