将Ascii值直接转换为十六进制值

时间:2015-05-14 12:48:46

标签: java hex

我有一个由十六进制字母组成的文字字符串,例如00bff040dadd1fde55,我希望将字符串转换为其十六进制等同的字符串'以字节为单位,即转换为字节数组,例如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}

是否有可以进行此转换的Java类?如果没有,有没有人有我可以实现的算法来进行上述转换?

2 个答案:

答案 0 :(得分:3)

  

是否有可以进行此转换的Java类?

标准库中没有类将包含十六进制字符的字符串转换为字节数组...就像 1

  

如果没有,有没有人有我可以实现的算法来进行上述转换?

  1. 将字符串的长度除以2,并分配该大小的字节数组。
  2. 重复直到字符串为空:

    1. 删除包含前两个字符的子字符串。
    2. 使用Integer.parseInt(twoChars, 16)转换为整数。
    3. 将整数转换为字节并添加到字节数组。
  3. 此算法可以轻松转换为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