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

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

我不可能比发布这里也有同样的问题

但是为了保持它的原始性,我将用我自己的方式来表达它:假设我有一个字符串“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或异常添加参数检查

发表评论