怎么把16进制的gbk码转换成汉字(我只有把汉字转换成16进制的代码)
大家好,我现在在做一个火车票二维码信息的小程序,我先用二维码软件读出火车票上的信息,然后再根据信息解密方式解读出来。动车是实名制的,其中乘客姓名是用一段10进制的数字表示的,解密时需要把10进制转换成16进制,然后我只能通过汉字反查gbk码来验证转换后的16进制数字。想请教哪位高手给一个把16进制数字转换成汉字的代码,小弟不胜感激!
附火车票二维码部分信息解读(转):
现举例分析,这是一张真火车票上二维码包含的信息(颜色只为方便下面的讲解):
280979551431033643637933330963623970135351819614962562403976657943200000000000000000000053897628805389762880538976288053897628805389762881730000
现在开始跟大家分享我已经了解的部分:
前两位(褐色)为火车票左上角红色票号首字母的代码,该数字加39后得到相应字母的ASCII码,以该例说明,28+39=67,查询ASCII表得到大写C,其他情况依此类推,再例如A就是26了。
3-8位(红色)为火车票左上角红色票号后面的六位数字,只起为每张票编号的作用,一起买的票就是连号的。
再后面55位(浅紫色)即是尚未分析出的部分,估计与火车票上本文未提到的其他信息有关,而且很可能是16进制编码。
接着的六位(橙色)是身份证号开始的标识,每张票都一样。
正如上句所言,接着的18位(***)就是身份证号了,非实名制购买的车票就是18个0,至于尾数是x的身份证号怎么处理的我还不知道,手头没有案例。
然后是个比较复杂的部分,例子中重复了五遍的“0538976288”(蓝色)就是实名制购买的车票的姓名信息了。以如下方式解密:第一步,每十位数字分段,每段换算成相应的八位十六进制数;第二步,将上述得到的16进制数字按每两位分段,从后往前一段一段往前读,每两段就是一个汉字的GB编码了。如果不懂,请看如下两个例子:先说本例,首先,分为五段“0538976288”,换算成十六进制就是“20202020”,对计算机了解较多的同学可能直接就懂了,20(16进制)代表的就是空格,也就是说非实名制车票的姓名部分全是空格;第二个例子,如果你换算出的十六进制是2020……F5C1(前面是若干20,后四位是F5C1),然后每两位分段,最后部分为F5,C1,最后从后往前读得到C1F5,这就是汉字“刘”的GB编码,可以用微软拼音输入法验证(虽然我也讨厌这个输入法,每次装完系统或微软的软件之后都要屏蔽,但是它还是有这个特殊用途的,该功能在其菜单栏的“功能菜单”——“辅助输入法”——“GB码输入”)。
理解之后就会发现其实也没啥加密技术含量,也就是两次编码换算和一次倒序而已。
最后倒数4-7位(绿色)是火车的发车时间,例子中1730代表的就是下午5点半发车。之所以刚才说了“最后”是因为实际上的最后三位都是3个0,估计起解决冲突或保留功能的作用吧~
好了,就是这些,谁对中间55位有了解就烦请指点了~