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

我正在寻找一种方法来将一个长字符串(从转储),表示十六进制值转换为字节数组。

我不能够比在那里张贴同样的问题的人更好的措辞:

http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21062554.html

但是为了保持它的原始,我将自己的方式:假设我有一个字符串“00A0BF”,我想解释为byte [] {0x00,0xA0,0xBf},我应该怎么办?

我是一个Java新手,最后使用BigInteger,并注意领先的十六进制零。但我认为这是丑陋,我相信我错过了一些简单的…

最佳答案
这里有一个解决方案,我认为比任何发布到目前为止:

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不同)
>不会将字符串转换为char [],或为每个字节创建StringBuilder和String对象。

如果参数不是安全的,可以通过断言或异常添加参数检查。

转载注明原文:使用Java将十六进制转储的字符串表示转换为字节数组? - 代码日志