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