1

32 バイトの 16 進文字の文字列 (b8aa30d8f1d398883f0eeb5079777c42) を 16 バイトの 16 進値の文字列 (x'b8aa30d8f1d398883f0eeb5079777c42') に変換しようとしています。

ここで見つけたいくつかの提案を試しました。

    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < input.length(); i++) {
        String s = input.substring(i, i + 2);       
        byte value = Byte.valueOf(s, 16);
                       sb.append(value);
    }

これにより、次の例外が発生しました: 値が範囲外です。値:"b8" 基数:16

         String bin = "";
    String binFragment = "";
    int iHex;
    hex = hex.trim();
    hex = hex.replaceFirst("0x", "");

    for(int i = 0; i < hex.length(); i++){
        iHex = Integer.parseInt(""+hex.charAt(i),16);
        binFragment = Integer.toBinaryString(iHex);

        while(binFragment.length() < 4){
            binFragment = "0" + binFragment;
        }
        bin += binFragment;
    }

これは先頭の 0 を正しく処理しません

誰かがこの変換を行う方法を持っていますか?

私もこれを試しました:

public static void convert() {
    String s = "0c871eea3af7526f9b2e7054f6277984";
    byte[] bytes = DatatypeConverter.parseHexBinary(s);
    StringBuilder outputStringBuilder = new StringBuilder();
    for (byte currentByte : bytes) {
        outputStringBuilder.append((char) currentByte);
    }
    System.out.println(String.format("%s, %s", bytes, bytes.length));
    String out = bytes.toString();
    System.out.println(String.format("%s, %s", out, out.length()));
}

これらの結果が得られました: [B@f01a1e, 16 [B@f01a1e, 9

出力文字列を作成する前はバイト配列に 16 バイトありますが、作成後は 9 バイトしかありません。

4

2 に答える 2