while循环遍历一个字符串,一次接收8个字符的子字符串,为每个字符获取ASCII代码并将每个字节转换为其二进制表示,每8个字符为8个字符(8 * 8)数组,这里是代码:
消息文件包含: 1234567800000008
因此while循环运行两次,因为有16个字符,代码正确运行,直到二进制值在最后一个for循环的输入块中输入。当我在arraylist中添加输入块时,当我再次从araylist中获取它们时,它们不是相同的值
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 + "+");
}
出于某种原因,当我来打印arraylist的内容时,它打印出的不是二进制表示的实际字符..我不知道为什么?
输出最有效的
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
答案 0 :(得分:0)
你在问题中提到“从ArrayList中获取元素”,但我看不到你在input
任何地方读取(假设在这种情况下是列表)。
打印出的值始终为substr
,后跟文字+
字符,因为这是您要求程序打印出来的唯一内容(在while循环的最后一行)。 substr
的值在循环开始时设置为八个实际字符,因此这种行为似乎是合适的。
如果您要打印出二进制值,则需要将input
转换为您所使用的任何格式的字符串,并将 传递给{{1} }。
编辑以及您如何显示相关输出的额外信息,您的System.out.println()
打印方法存在错误。
您将两个循环声明为:
input
(和for(int i=0;i<input.size();i++)
相同)。因此,两个计数器变量从0变为j
- 即2,因为有2个字符。结果,您打印出前两个字节的前两位 - input.size
和00
。
你应该做什么AIUI正在00
数组的两个维度上完全迭代:
tmp
答案 1 :(得分: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");
}
}
其他一切都是正确的