【发布时间】:2012-07-11 17:52:55
【问题描述】:
我有一个实际上由十六进制字符组成的字符串数组。
假设内容是 ->
String array[] = {8C,D9,26,1D,69,B7,96,DB};
现在我希望将它们解释为每个 1 个字节的十六进制字符,而不是每个条目为 2 个字节的字符串。
StringBuilder output = new StringBuilder();
for (int j = 0; j < array.length; j++) {
String temp = "\u00"+ array[j];
output.append(temp);
}
尝试过类似的方法,但这是不可能的,因为它一直在抱怨“非法 unicode 转义”。我尝试使用“\u00”(即 u 之前的两个反斜杠,但 stackoverflow 在那里只显示一个)而不是“\u00”来解决该错误,但是我没有在数组中看到真正的十六进制值,而是我看到一堆字符串,比如 -> "\U008C" , "\U00D9" 等等..
我希望转换后的值为 0x8C、0xD9、0x26...
谢谢。
编辑:我已经更新了这个问题,只是为了澄清数组本身没有逗号。最终我需要将所有这些值放在一起,并将其用作 HMAC 密钥,它是一个十六进制字符串而不是文本字符串。
【问题讨论】:
-
所以你想要一个
byte[]作为你的输出?如果是这样,您上面的示例会产生误导,因为您正在构建一个字符串。 -
一旦我有了十六进制字符串,我会在上面做一个 getBytes() 。
-
Unicode 转义像 "\u20ac" 是由编译器在编译时处理的,所以无论如何用
"\u00" + array[j]在代码中生成它们对你没有任何好处。我认为,Bohemian 的答案的第一部分是你所需要的。
标签: java arrays string hex hmac