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

问题:

我正在寻找一种方法来将一个长字符串(从转储)转换为十六进制值到一个字节数组中。
我不能比在这里张贴同样的问题的人更好地表达:
 http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21062554.html
但是要保持原样,我会用自己的方式来说:假设我有一个字符串“00A0BF”,我想解释为字节[] {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; } [/code] 为什么这是一个改进的原因:

  • 前导零(与BigInteger不同)和负字节值(不同于Byte.parseByte)安全
  • 不将String转换为char[],或者为每个单个字节创建StringBuilder和String对象。

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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Convert a string representation of a hex dump to a byte array using Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 10 = 15