我有一个实际上由十六进制字符组成的String数组。
让我们说内容是 - >
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”(即你之前的两个反斜杠,但stackoverflow只显示一个)而不是“\ u00”来绕过那个错误,但后来我没有在数组中看到真正的十六进制值,而是我看到一堆字符串,如 - &gt; “\ U008C”,“\ U00D9”等等。
我希望转换后的值为0x8C,0xD9,0x26 ......
感谢。
编辑:我已经更新了这个问题,只是为了澄清阵列本身没有逗号。最后我需要将所有这些值放在一起,并将其用作一个十六进制字符串而不是文本字符串的HMAC密钥。答案 0 :(得分:4)
让JDK为您完成工作:
String[] array = {"8C", "D9", "26", "1D", "69", "B7", "96", "DB"};
StringBuilder output = new StringBuilder();
for ( String hex : array ) {
output.append( (char)Integer.parseInt( hex, 16 ) );
}
基本上只需要循环中的一行即可。
如果您希望您的输入只是一个大字符串(看起来更方便),请改为:
String input = "8CD9261D69B796DB";
StringBuilder output = new StringBuilder();
for ( String hex : input.replaceAll( "..(?!$)", "$0," ).split( "," ) ) {
output.append( (char)Integer.parseInt( hex, 16 ) );
}
如果你想要byte []结果,请执行以下操作:
String[] array = {"8C", "D9", "26", "1D", "69", "B7", "96", "DB"};
byte[] bytes = new byte[array.length];
for ( int i = 0; i < array.length; i++ ) {
bytes[i] = (byte)Integer.parseInt( array[i], 16 );
}
答案 1 :(得分:0)
使用String.split方法拆分
对于返回数组中的每个元素,go data [i] =“0x”+ data [i];
对于数组中的每个元素str + = data [i]
EZ
答案 2 :(得分:0)
您可以按如下方式拆分:
public static void main(String[] args) {
String givenString = "8C,D9,26,1D,69,B7,96,DB";
String[] splitString = givenString.split("[,]");
for(int index = 0; index < splitString.length; index++){
System.out.print("0x"+ splitString[index]);
System.out.print((index == splitString.length - 1) ? "":",");
}
System.out.println();
}
为了加入它们,而不是我的System.out
语句,请使用StringBuilder或StringBuffer并附加到它。