-1

16 進文字列をバイトに変換し、それをバイト配列に保存したいと考えています。インターネットでコードを見て、自分のプログラムに適用しようとしましたが、完全に途方に暮れています。Java は初めてです。私の変換を手伝ってください。以下は私が書いたコードです。ありがとうございました

public class Main {

    static String s = "00e83901c829e3735cc04137f3598a2b565c67665446d46ee74a6fd4ff8f556c7272fb6aeda45a757639aee558b130442fd4ff3f5cf98a08d0da6a23216d192dfd24bdda08a0b1081ae59fba0ae1516a2e02989df6b17a513b08895705552950e14fe430da3eae58fcc70619a129b534bbed6a9abc39706b1884b85a628781a86cc5223f038a7c0b48e1cf94033f7c5f1637900559b38fe2ccf41a14df5b8d81388fcebc69b59f7bc85a1c3e8b34a6deeb04a1e7fb1d3a7ae59009ea002aaa6ba5cdb9fa45653ac5eb89f61d436934f992197dbdb4c4a212cd7fbcd231debda57f11943b7f66215ecd616a4eed13fc9e38cd41d571b9faf496053b50a50321a076393ad91832959347f1fe5efd18e6267377108382fd992216a439ddc3dc59ce0ea955de95db767de4877caeaf8c7c4718e906d59db492cd610e7a28056f";

    public static void main(String[] args) {
    }

    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) +
                               Character.digit(s.charAt(i+1), 16));
        }
        return data;

    }
}
4

4 に答える 4

2

メソッドを呼び出すと、コードが機能します。

public static void main(String[] args) {
    String s="00e83901c829e3735cc04137f3598a2b565c67665446d46ee74a6fd4ff8f556c7272fb6aeda45a757639aee558b130442fd4ff3f5cf98a08d0da6a23216d192dfd24bdda08a0b1081ae59fba0ae1516a2e02989df6b17a513b08895705552950e14fe430da3eae58fcc70619a129b534bbed6a9abc39706b1884b85a628781a86cc5223f038a7c0b48e1cf94033f7c5f1637900559b38fe2ccf41a14df5b8d81388fcebc69b59f7bc85a1c3e8b34a6deeb04a1e7fb1d3a7ae59009ea002aaa6ba5cdb9fa45653ac5eb89f61d436934f992197dbdb4c4a212cd7fbcd231debda57f11943b7f66215ecd616a4eed13fc9e38cd41d571b9faf496053b50a50321a076393ad91832959347f1fe5efd18e6267377108382fd992216a439ddc3dc59ce0ea955de95db767de4877caeaf8c7c4718e906d59db492cd610e7a28056f";
    byte[] b = hexStringToByteArray(s);
    System.out.println(b);

    //edit:
    System.out.println(Arrays.toString(b));
}
于 2012-11-01T20:45:01.660 に答える
0

私はもっ​​とよく読むべきです。あなたの質問は変換に関するものだと思っていましたが、今は表示に関するものだと思います。それがディスプレイに関するものである場合、ここにいる他の人は、メイン メソッド (魔法が起こる場所) で何も呼び出していないことに気付きました。変換に関する問題であれば、BigInterger が面倒な作業を代行してくれます。念のため: これは機能します (最後の 5 行は、出力が入力と一致するかどうかを確認するためのものです)。

public static void main(String[] args) {
    byte[] bytes = new BigInteger(s, 16).toByteArray();
    System.out.println(Arrays.toString(bytes));

    List<String> hexToCheck = new ArrayList<String>(bytes.length);
    for (byte b : bytes) {
        hexToCheck.add(String.format("%02X", b));
    }
    System.out.println(hexToCheck);
}

(あなたの質問に対する正しい答えが主な方法の記入である場合は、他の回答のいずれかを正しい答えとして選択してください)

于 2012-11-01T21:49:43.930 に答える
0

ここで簡単なユーティリティ クラス チェックが必要です。以下は、 から に変換してからhex stringbyte[]変換しhex string、変換が適切であったかどうかを比較する例です。

public class Test {

public static void main(String[] args) {
    String str = "00e83901c829e3735cc04137f3598a2b565c67665446d46ee74a6fd4ff8f556c7272fb6aeda45a757639aee558b130442fd4ff3f5cf98a08d0da6a23216d192dfd24bdda08a0b1081ae59fba0ae1516a2e02989df6b17a513b08895705552950e14fe430da3eae58fcc70619a129b534bbed6a9abc39706b1884b85a628781a86cc5223f038a7c0b48e1cf94033f7c5f1637900559b38fe2ccf41a14df5b8d81388fcebc69b59f7bc85a1c3e8b34a6deeb04a1e7fb1d3a7ae59009ea002aaa6ba5cdb9fa45653ac5eb89f61d436934f992197dbdb4c4a212cd7fbcd231debda57f11943b7f66215ecd616a4eed13fc9e38cd41d571b9faf496053b50a50321a076393ad91832959347f1fe5efd18e6267377108382fd992216a439ddc3dc59ce0ea955de95db767de4877caeaf8c7c4718e906d59db492cd610e7a28056f";
    String str1 = new String(encodeHex(hexStringToByteArray(str)));
    if (str1.equals(str)) {
        System.out.println("String matches ");
    }
}

public static byte[] hexStringToByteArray(String str) {

    char[] data = str.toCharArray();
    int len = data.length;
    byte[] out = new byte[len >> 1];
    for (int i = 0, j = 0; j < len; i++) {
        int f = Character.digit(data[j], 16) << 4;
        j++;
        f = f | Character.digit(data[j], 16);
        j++;
        out[i] = (byte) (f & 0xFF);
    }
    return out;
}

public static char[] encodeHex(byte[] data) {

    int l = data.length;
    char[] out = new char[l << 1];
    for (int i = 0, j = 0; i < l; i++) {
        out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
        out[j++] = DIGITS[0x0F & data[i]];
    }

    return out;
}

private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6',
        '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
}

出力:

 String matches
于 2012-11-01T20:41:13.767 に答える
0

Javaプログラムを実行すると、メインメソッドが呼び出され、あなたの場合は空です。メインメソッドでメソッドを呼び出す必要があります。静的な hexStringToByteArray メソッドがあるので、このように呼び出すことができます

  public static void main(String[] args) {

    hexStringToByteArray(s);

     }
于 2012-11-01T20:50:23.647 に答える