4

実際には16進文字で構成される文字列配列があります。

内容は->としましょう

String array[] = {8C,D9,26,1D,69,B7,96,DB};  

ここで、これらを、各エントリが 2 バイトの文字列としてではなく、それぞれ 1 バイトの 16 進文字として解釈するようにします。

StringBuilder output = new StringBuilder();
for (int j = 0; j < array.length; j++) {
        String temp = "\u00"+ array[j];
        output.append(temp);
    }

そのようなことを試みましたが、「不正なユニコードエスケープ」について不平を言い続けているため、不可能です。そのエラーを回避するために、「\u00」の代わりに「\u00」(つまり、uの前に2つのバックスラッシュがありますが、stackoverflowはそこに1つしか表示しません)を使用しようとしましたが、配列に実際のHex値が表示されません。 -> "\U008C" 、 "\U00D9" などの文字列の束を参照してください..

変換後の値を 0x8C、0xD9、0x26 にしたい...

ありがとう。

編集:配列自体にコンマがないことを明確にするために、質問を更新しました。最終的には、これらすべての値をまとめて、テキスト文字列ではなく 16 進文字列である HMAC キーとして使用する必要があります。

4

3 に答える 3

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 ) );
}

基本的に、ループ内のその 1 行だけで十分です。

入力を 1 つの大きな文字列にしたい場合 (より便利に思えます)、代わりに次のようにします。

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-12T02:20:38.030 に答える
0

String.splitメソッドを使用して、で分割します。

返された配列の各要素について、go data [i] = "0x" + data [i];

配列内の要素ごとにstr+= data [i]

EZ

于 2012-07-12T02:09:32.333 に答える
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.outStringBuilderまたはStringBufferを使用して追加します。

于 2012-07-12T02:10:15.570 に答える