0

while ループは string を反復処理し、一度に 8 文字の部分文字列を取り込み、各文字の ASCII コードを取得し、各バイトを 8 文字としてバイナリ表現に変換しますso (8*8) 8 文字ごとの配列, コードは次のとおりです:

メッセージ ファイルの内容: 1234567800000008

したがって、16 文字あるため、while ループは 2 回実行されます。最後の for ループの入力ブロックにバイナリ値が入力されるまで、コードは正しく実行されます。配列リストに入力ブロックを追加すると、配列リストから再度 .get() すると同じ値になりません

        while(Message.length() != 0){
            substr=Message.substring(0, 8);
            bytes = substr.getBytes("ASCII");
            int[][] inputblock = new int[bytes.length][bytes.length];

                for(int i=0; i<bytes.length;i++){
                    binString =Integer.toBinaryString(bytes[i]);

                        while (binString.length() < 8) {binString = "0" + binString;}

                      for(int j=0; j<bytes.length;j++){
                           int x=Character.digit(binString.charAt(j), 2);
                                inputblock[i][j] = x;

                            }
                          }     
             input.add(inputblock);  //// This is supposed to add each 64 bit (8*8) 
          Message=Message.replace(substr, "");        //Array to arraylist input. 
    System.out.print(substr + "+");


    }

なんらかの理由で、配列リストの内容を印刷しようとすると、バイナリ表現ではない実際の文字が印刷されます..理由がわかりませんか?

コンテンツを出力するには

for (int i =0;i<input.size();i++){
     int[][] tmp = input.get(i);

     for(int j=0;j<input.size();j++){
         System.out.print(tmp[i][j]); }
       System.out.print("\n");
    }

出力: 12345678+00000008+00 00

4

2 に答える 2

0

次のコード以外はすべて問題ありません...

for (int i =0;i<input.size();i++){
     int[][] tmp = input.get(i);

     for(int j=0;j<input.size();j++){
         System.out.print(tmp[i][j]); }
       System.out.print("\n");
}

このコードを次のコードに置き換えます...

for (int[][] tmp :input.size();){

    for(int i=0; i< tmp.length; i++)
        for(int j=0;j<tmp.length;j++){
            System.out.print(tmp[i][j]); 
        }
       System.out.print("\n");
    }
}

それ以外はすべて正しい

于 2012-11-20T11:20:27.137 に答える
0

質問で「ArrayListから要素を取得する」と述べていますが、どこからでも読んでいるのを見ることができませんinput(この場合はそれがリストであると仮定します)。

出力される値の後には常にsubstrリテラル+文字が続きます。これは、プログラムに出力を要求する唯一のものであるためです (while ループの最終行で)。の値はsubstr、ループの開始時に実際の 8 文字に設定されるため、この動作は適切と思われます。

バイナリ値を出力したい場合は、任意の形式の文字列に変換し、それを に渡す必要ありinputます。System.out.println()


関連する出力をどのように表示しているかの追加情報を編集inputしてください。印刷方法にバグがあります。

両方の for ループを次のように宣言しています。

for(int i=0;i<input.size();i++)

(および についても同じj)。したがって、2 つの文字があるため、両方のカウンター変数は 0 からinput.size- これは 2 になります。その結果、最初の 2 バイトの最初の 2 ビット0000.

あなたがすべきこと AIUI は、tmp配列の両方の次元を完全に反復処理しています。

for(int i = 0; i < input.size(); i++) {
   int[][] tmp = input.get(i);

   for(int j = 0; j < tmp.length; j++) {
      for (int k = 0; k < tmp[j].length; k++) {
         System.out.print(tmp[j][k]);
      }
      System.out.println();
   }
   System.out.println();
}
于 2012-11-20T10:26:41.650 に答える