[英]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.