我的二进制文件中缺少一个“0” - 如何修复它?

时间:2017-07-31 09:01:54

标签: java binary

我尝试使用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”。我该如何解决这个问题?

3 个答案:

答案 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()