为了账号安全,请及时绑定邮箱和手机立即绑定

使用Java将十六进制转储的字符串表示形式转换为字节数组?

使用Java将十六进制转储的字符串表示形式转换为字节数组?

使用Java将十六进制转储的字符串表示形式转换为字节数组?我正在寻找一种方法来转换长字符串(从转储),它表示十六进制值到一个字节数组。我不能比在这里发布相同问题的人更好地措辞。但为了保持原创,我会用自己的方式来表达它:假设我有一个"00A0BF"我想要解释为的字符串byte[] {0x00,0xA0,0xBf}我该怎么办?我是Java新手,最后使用BigInteger并注意领先的十六进制零。但我觉得它很难看,我确信我错过了一些简单的东西。
查看完整描述

4 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

这是一个我认为比目前任何发布的解决方案更好的解决方案:

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;}

这是一个改进的原因:

  • 带前导零的安全(与BigInteger不同)和负字节值(与Byte.parseByte不同)

  • 不将String转换为a char[],或为每个字节创建StringBuilder和String对象。

  • 没有可能不可用的库依赖项

assert如果不知道参数是否安全,可以随意添加参数检查或异常。


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 1503 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信