转换ASCII值以十六进制值

问题描述:

我具有由作为00bff040dadd1fde55十六进制字母这样的文字串,我希望将字符串转换成它的hex“等效”以字节为单位,即到字节数组如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}转换ASCII值以十六进制值

有没有可以做这种转换的Java类?如果没有,有没有人有我可以执行上述转换的算法?

如果你的意思是你要的字符串分隔成十六进制的字节,可以使用正则表达式:

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 
+0

虽然这是正确的,我认为这个问题是相当混乱,我想它要求转换成一个字节数组,而不是一串整齐格式化的字节值。 – biziclop

+0

是的,我不确定。我已经添加了两个不同的结局。希望他们中的一个会很开心。 –

+0

@aetheria是的,一个字节数组是我想要的。我编辑了这个问题来说明问题。感谢您的示例代码! –

是否有一个Java类,它可以做到这一点的转换?

有在将含有十六进制字符的字符串转换成字节数组...那样标准库中没有的类。

如果不是,有没有人有一个算法,我可以实现上述转换?字符串的

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

    1. 删除包括前两个字符的子字符串。
    2. 使用Integer.parseInt(twoChars, 16)转换为整数。
    3. 将整数转换为字节并添加到字节数组中。

该算法可以很容易地转换为Java代码。


1 - 如果你真的想要的字节序列表示为一个字符串“文本”,然后再看@ aetheria的答案...