繁体   English   中英

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

[英]Converting int/long to 64-bit binary

我正在寻找一种更好的方法将 int 转换为表示为 String 的 64 位二进制文​​件。 现在我正在将 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 个字符,因此需要所有前导零。

您可以使用long数据类型,它是64位有符号整数。 然后调用Long.toBinaryString(i)将给你i的二进制表示形式

如果您已经有一个int则可以将其强制转换为long并使用上面的方法。

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

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

请参阅如何在Java中填充字符串? 有关更多选项。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM