16进制转指定编码的字符串

  前几天公司进行业务升级,需要将数据上链(之前只是将业务hash上链),上链后发现区块链平台没有对上上去的数据进行处理,取下来就是一串16进制的字符。因为我们这边需要将上链的数据进行回显,所以需要对这些16进制数据进行转换。问了区块链平台的人,这些字符是char类型且是按utf-8编码的,所以就可以确定是2个字节为一组的。思路最终肯定是要调用jdk提供的方法,按照utf-8进行解码。但是java直接处理16机制数不太方便,所以思路就是先将16进制数转换为10进制数存入byte数组中,最后调用new S
摘要由CSDN通过智能技术生成

  前几天公司进行业务升级,需要将数据上链(之前只是将业务hash上链),上链后发现区块链平台没有对上上去的数据进行处理,取下来就是一串16进制的字符。因为我们这边需要将上链的数据进行回显,所以需要对这些16进制数据进行转换,而2个16进制数表示一个字节,所以就可以确定是2个字符为一组的。问了区块链平台的人,这些字符是char类型且是按utf-8编码的。

思路

最终肯定是要调用jdk提供的方法,按照utf-8进行解码。但是java直接处理16机制数不太方便,所以思路就是先将16进制数转换为10进制数存入byte数组中,最后调用new String(bytes[],charsetName)方法得到最终结果。

过程

我们这里因为是2个字符为一组的,所以转换方法就是第一位10进制数乘以16再加上第二位的10进制数,例如:2b转换为10进制就是2*16+11=43。

然后因为要现将字符串转换为char,而16进制又是由0-9的数字和a-f的字母组成的,所以转化成char后我们需要把原来具体每一位10进制的数算出来。例如:同样是16进制字符2b,字符2对应的10进制ascii码值是50,所以我们需要减去字符0(数字的起始字符)的10进制ascii码值48,从而得到字符2的10进制数2。

对于字母也是一样,字符b对应的10进制ascii码值是98,再减去字符a的(小写字母的起始字符)10进制ascii码值97,这里要记得加上10,因为字母a相当于10进制数10,得到字符a的10进制数11。

代码如下:

public static String HexToString(String str) throws UnsupportedEncodingException {
   
        char[] chars = str.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值