【发布时间】:2015-05-14 12:48:45
【问题描述】:
我有一个由十六进制字母组成的文字字符串,例如00bff040dadd1fde55,我希望将字符串转换为以字节为单位的十六进制“等效”,即转换为字节数组,例如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
是否有可以进行这种转换的 Java 类?如果没有,是否有人有我可以实现的算法来进行上述转换?
【问题讨论】:
我有一个由十六进制字母组成的文字字符串,例如00bff040dadd1fde55,我希望将字符串转换为以字节为单位的十六进制“等效”,即转换为字节数组,例如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
是否有可以进行这种转换的 Java 类?如果没有,是否有人有我可以实现的算法来进行上述转换?
【问题讨论】:
是否有可以进行这种转换的 Java 类?
标准库中没有将包含十六进制字符的字符串转换为字节数组的类......就像那样1。
如果没有,是否有人有我可以实现的算法来进行上述转换?
重复直到字符串为空:
Integer.parseInt(twoChars, 16) 转换为整数。这个算法可以很容易地转换成 Java 代码。
1 - 如果您确实想要将字节“文字”序列表示为字符串,请查看@aetheria 的答案...
【讨论】:
如果你的意思是要将字符串分隔成十六进制的字节,你可以使用正则表达式:
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
【讨论】: