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