使用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;
}
改善的原因:
具有前导零(与BigInteger不同)和负字节值(与Byte.parseByte不同)
不将字符串转换为char[]
,或者为每个字节创建StringBuilder和String对象。
如果参数不被认为是安全的,可以通过assert
或异常自由地添加参数检查。
单行:
import javax.xml.bind.DatatypeConverter;
public static String toHexString(byte[] array) {
return DatatypeConverter.printHexBinary(array);
}
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
警告 :
eckes
) Fabian
注意到这一点),但是如果系统由于某种原因缺少javax.xml
,则可以采用源代码。 感谢@ Bert Regelink
提取源代码。 commons-codec中的Hex类应该为你做。
http://commons.apache.org/codec/
链接地址: http://www.djcxy.com/p/87203.html上一篇: Convert a string representation of a hex dump to a byte array using Java?