我有一个字符串数组,它实际上由十六进制字符组成。
假设内容是->
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密钥。
发布于 2012-07-12 02:20:38
让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 );
}
发布于 2012-07-12 02:09:32
使用String.split方法拆分,
对于返回的数组中的每个元素,使用datai = "0x“+ datai;
对于数组中的每个元素字符串+= datai
EZ
发布于 2012-07-12 02:10:16
您可以按如下方式拆分:
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();
}
为了连接它们,使用StringBuilder或StringBuffer并附加到它,而不是我的System.out
语句。
https://stackoverflow.com/questions/11444072
复制