字符串数组到十六进制数组(Java)

时间:2012-07-12 01:58:12

标签: java arrays string hex hmac

我有一个实际上由十六进制字符组成的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密钥。

3 个答案:

答案 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并附加到它。