使用Java将十六进制转储的字符串表示形式转换为字节数组?我正在寻找一种方法来转换长字符串(从转储),它表示十六进制值到一个字节数组。我不能比在这里发布相同问题的人更好地措辞。但为了保持原创,我会用自己的方式来表达它:假设我有一个"00A0BF"我想要解释为的字符串byte[] {0x00,0xA0,0xBf}我该怎么办?我是Java新手,最后使用BigInteger并注意领先的十六进制零。但我觉得它很难看,我确信我错过了一些简单的东西。
4 回答
慕少森
TA贡献2019条经验 获得超9个赞
这是一个我认为比目前任何发布的解决方案更好的解决方案:
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不同)
不将String转换为a
char[]
,或为每个字节创建StringBuilder和String对象。没有可能不可用的库依赖项
assert
如果不知道参数是否安全,可以随意添加参数检查或异常。
添加回答
举报
0/150
提交
取消