0

文字列を16進数でエンコードしてから、再度文字列に変換しようとしています。この目的のために、Apache 共通コーデックを使用しています。特に、次のメソッドを定義しました。

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
public String toHex(byte[] byteArray){

    return Hex.encodeHexString(byteArray);    

}

public byte[]  fromHex(String hexString){

    byte[] array = null;

    try {
        array = Hex.decodeHex(hexString.toCharArray());
    } catch (DecoderException ex) {
        Logger.getLogger(SecureHash.class.getName()).log(Level.SEVERE, null, ex);
    }

    return array;

}

奇妙なことは、元に戻すときに同じ最初の文字列が得られないことです。さらに奇妙なことに、取得したバイト配列は、文字列の最初のバイト配列とは異なります。私が書いた小さなテストプログラムは次のとおりです。

    String uno = "uno";
    byte[] uno_bytes = uno.getBytes();

    System.out.println(uno);
    System.out.println(uno_bytes);

    toHex(uno_bytes);
    System.out.println(hexed);

    byte [] arr = fromHex(hexed);
    System.out.println(arr.toString());

出力の例は次のとおりです。

uno            #initial string
[B@1afe17b     #byte array of the initial string
756e6f         #string representation of the hex 
[B@34d46a      #byte array of the recovered string

また、別の奇妙な動作があります。バイト配列 ([B@1afe17b) は固定ではなく、コードの実行ごとに異なりますが、その理由がわかりません。

4

1 に答える 1