将int / long转换为64位二进制

时间:2017-06-23 10:13:05

标签: java binary

我正在寻找一种更好的方法将int转换为64位二进制,表示为String。现在我将int转换为32位二进制,然后在它前面添加32个零。我正在实现SHA-1,我需要将int作为64位二进制文​​件。

private static String convertIntTo64BitBinary(int input) {
    StringBuilder convertedInt = new StringBuilder();
    for(int i = 31; i >= 0; i--) { // because int is 4 bytes thus 32 bits
        int mask = 1 << i;
        convertedInt.append((input & mask) != 0 ? "1" : "0");
    }
    for(int i = 0; i < 32; i++){
        convertedInt.insert(0, "0");
    }
    return convertedInt.toString();
}

编辑1: 不幸的是,这不起作用:

    int messageLength = message.length();
    String messageLengthInBinary = Long.toBinaryString((long) messageLength);

messageLengthInBinary is "110"

编辑2: 澄清: 我需要字符串为64个字符长,因此需要所有前导零。

2 个答案:

答案 0 :(得分:1)

您可以使用长数据类型,它是64位有符号整数。然后调用Long.toBinaryString(i)将为您提供i

的二进制表示形式

如果您已经拥有int,那么您可以将它投射到很长时间并使用上述内容。

这不包括前导0,因此生成的字符串需要填充到64个字符。 这样的事情会起作用。

String value = Long.toBinaryString(i)
String zeros = "0000000000000000000000000000000000000000000000000000000000000000" //String of 64 zeros
zeros.substring(value.length()) + value;

有关更多选项,请参阅How can I pad a String in Java?

答案 1 :(得分:0)

这是我的第一个 Java 程序 :)

    private static String convertIntTo64BitBinary2(int input)
    {
    if (input !=0)
         return "0".repeat(Long.numberOfLeadingZeros(input)) + Integer.toBinaryString(input) ;
    else
         return "0".repeat(64);
    }