我尝试使用OTP(One Time Pad)进行加密。我编写了一个“测试”代码,看看我是否把一切都做对了。
final String message = "Hello";
char character;
String binary;
for (int i = 0; i < message.length(); i++) {
character = message.charAt(i);
binary = Integer.toBinaryString(character);
System.out.println(character + ": " + binary);
}
所以,有以下几点:
H: 1001000
e: 1100101
l: 1101100
l: 1101100
o: 1101111
这不是真的正确。我在inet中搜索过,例如H
的二进制文件01001000
缺少一个“0”。我该如何解决这个问题?
答案 0 :(得分:1)
而不是binary = Integer.toBinaryString(character);
使用以下表达式:
binary = String.format("%8s", Integer.toBinaryString(character)).replace(' ', '0');
答案 1 :(得分:0)
缺少的零是前导零。二进制表示本质上是数字,这意味着前导零没有任何意义。因此他们被排除在外;数字1001000
等于数字function enable() {
$("#ddlBranch").removeAttr('disabled');
}
。
如果您确实要打印这些前导零,我建议您使用字符串格式化函数来解决此问题,该函数会打印精确的位数,而不管数字的长度。
答案 2 :(得分:0)
另一种选择是使用DecimalFormat
:
private static String format( Integer value, String format )
{
DecimalFormat myFormatter = new DecimalFormat( format );
return myFormatter.format( value );
}
通过这个,你可以到达数字和它应该显示的格式。像这样:
System.out.println(format( 1001000 , "00000000" ));
以0
格式表示您必须显示的数字0
或已达到的数字。如果您的格式比实际数字长,则显示前导地点将显示为{{ 1}}。
如果您阅读JavaDoc,则会找到
特殊模式字符
在那里,您可以看到格式选项的概述以及它们将要执行的操作。
修改强>
正如Olivier在评论中指出的那样,需要再次转换它。
使用0
转换角色时
您可以使用Integer.toBinaryString(character);
将String
强制转换为Long,然后将其转换为函数或仅将方法重构为:
Long.valueOf()