• 【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");这样就获取到了 区位码 对应的 汉字。

  • 相关阅读:
    神经网络学习笔记
    SQL 快速生成千万数据
    云图说用图片的形式展示APM的功能的重要性
    skywalking实现参数的动态调整功能
    skywalking告警篇详细分析
    skywalking UI大盘制作ppt必看
    skywalking性能分析在线代码级性能剖析,补全分布式追踪的最后一块“短板”
    技术中台报警指标说明
    skywalking告警篇详细分析(二)
    skywalkingUI功能详细说明
  • 原文地址:https://www.cnblogs.com/shenchaoming/p/2264553.html
Copyright © 2020-2023  润新知