2

あるクラスで生成されたコードが、別のクラスで検証されたコードと同じであることを検証する必要があります。しかし、ねじれは他のクラスにあり、使用されるロジックは異なります。こんな感じです。

クラスA:

String = "0A2D" (仮定) サブストリング メソッドを使用し、 0A 、 2D を取り出し、それらを Decimal 値に変換してバイトとして保存します。最終結果は次のようになります

int a1 = (バイト) Integer.parseInt(s,16); ここで s= 0A
int a2 = (byte) Integer.parseInt(s,16); ここで s= 2D

したがって、a1 は 10 (1 バイト メモリ)、a2 は 45 (1 バイト メモリ) になります。

クラス B:

このクラスでは、メソッド getBytes() を使用することになっています。しかし、それを使用すると、奇妙な o/p が [B@ ...... まず、実際に何が起こっているのかについての情報が必要です。どのようにエンコードされていますか。次に、ここでの o/p は、クラス A の o/p と一致するバイトの配列である必要があります。

byte[] b = {a1a2} (メモリ 2 バイト) b = {1045}

したがって、最後に A はそれぞれ 1 バイトの 2 つの値を持つことになります。しかし、B には同じ 2 つの値を持つ配列がありますが、メモリ サイズは 2 バイトになります。

質問が明確で、混乱していないことを願っています。

あなたの親切な助けをいただければ幸いです。前もって感謝します。

4

4 に答える 4

0

byte []の内容を出力する場合は、最初にそれを文字列に変換する必要があります。

バイト配列を読み取り可能な文字列に変換するための便利な方法は次のとおりです。

public static String toHexString(byte[] data)
{
    if (data == null) return "";

    char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] hexChars = new char[data.length * 2];
    int v;

    for ( int j = 0; j < data.length; j++)
    {
        v = data[j] & 0xFF;
        hexChars[j*2] = hexArray[v/16];
        hexChars[j*2 + 1] = hexArray[v%16];
    }

    return new String(hexChars);
}

そこから、残りを解決できるはずです。

于 2012-06-28T03:00:59.160 に答える
0

出力 "[B@......" を与えるコード行は? (ドットは、出力が切り捨てられたことを意味すると思います。) この特定の出力は、配列の要素ではなく、配列参照を出力しようとしているかのように見えます。for ループを使用して個々の要素を出力するか、Array.toString() を使用して配列の String 表現を取得する必要があります。

于 2012-06-28T00:40:43.643 に答える
0

あなたの言語は少し不明確ですが、次のようにすると、あなたが望むことができると思います:

byte[] b = new byte[] { a1, a2 };

配列初期化子は、言語の非常に便利な機能です。

于 2012-06-28T00:17:55.257 に答える
0

おそらく、配列を印刷するときに Arrays.toString(arr) を使用して間違って印刷しているだけです

byte[] b = {a1a2} と言うときは、byte[] b = {a1,a2} を意味すると思います

于 2012-06-28T01:10:18.730 に答える