我正在寻找一种将表示十六进制值的长字符串(从转储)转换为字节数组的方法
我不可能比发布这里也有同样的问题
但是为了保持它的原始性,我将用我自己的方式来表达它:假设我有一个字符串“00A0BF”,我希望它被解释为
字节[]{0x00,0xA0,0xBf}
我该怎么办
我是一名Java新手,最终使用了biginger,并注意前导的十六进制零。但我认为这是丑陋的,我相信我错过了一些简单的东西
这里有一个我认为比目前发布的任何解决方案都好的解决方案:
/*s必须是偶数长度的字符串*/
公共静态字节[]hexStringToByteArray(字符串s){
int len=s.length();
字节[]数据=新字节[len/2];
对于(int i=0;i<;len;i+=2){
数据[i/2]=(字节)((字符.数字(s.charAt(i),16)<;<;4)
+字符.数字(s.charAt(i+1),16));
}
返回数据;
}
这是一种改进的原因:
-
使用前导零(不同于BigInteger)和负字节值(不同于byte.parseByte)是安全的
-
不会将字符串转换为
char[],也不会为每个字节创建StringBuilder和字符串对象 -
没有可能不可用的库依赖项
如果参数不安全,可以通过assert或异常添加参数检查