我正在寻找一种更好的方法将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个字符长,因此需要所有前导零。
答案 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);
}