我有一个由十六进制字母组成的文字字符串,例如00bff040dadd1fde55
,我希望将字符串转换为其十六进制等同的字符串'以字节为单位,即转换为字节数组,例如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
是否有可以进行此转换的Java类?如果没有,有没有人有我可以实现的算法来进行上述转换?
答案 0 :(得分:3)
是否有可以进行此转换的Java类?
标准库中没有类将包含十六进制字符的字符串转换为字节数组...就像 1 。
如果没有,有没有人有我可以实现的算法来进行上述转换?
重复直到字符串为空:
Integer.parseInt(twoChars, 16)
转换为整数。此算法可以轻松转换为Java代码。
1 - 如果你真的想要一个字节序列"文字"用字符串表示,然后看看@ aetheria的答案......
答案 1 :(得分:2)
如果您想将字符串分隔为十六进制字节,则可以使用正则表达式:
String s = "00bff040dadd1fde55";
String hex = "{" + s.toUpperCase().replaceAll("(..)", "0x$1 ").trim() + "}";
System.out.println(hex);
打印:
{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
如果您的意思是希望得到一个字节数组:
int size = s.length() / 2;
byte[] arr = new byte[size];
for (int i = 0; i < size; i++) {
arr[i] = (byte) Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
}
要证明数组包含正确的字节:
for (int i = 0; i < arr.length; i++) {
System.out.print(String.format("%02X ", arr[i]) + " ");
}
打印:
00 BF F0 40 DA DD 1F DE 55