【问题标题】:Converting int/long to 64-bit binary将 int/long 转换为 64 位二进制
【发布时间】:2021-11-07 01:31:36
【问题描述】:

我正在寻找一种将 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 而不是int,为什么不直接使用toBinaryString
  • 它不工作 - 检查我的 EDIT 1。我需要前导零使其长度为 64 位。

标签: java binary


【解决方案1】:

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

如果您已经有一个 int,那么您可以将其转换为 long 并使用上述内容。

这不包括前导 0s,因此生成的字符串需要填充到 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?

【讨论】:

  • 不幸的是,它不起作用 - 之前尝试过。看看我的编辑
  • @doublemc 啊,因为它不包括领先的0s。你需要自己用它们来填充字符串,给我几分钟的时间来编辑
  • 是的,我已经按照帖子中的说明让它工作了,但是它太丑了(使用 SB 的插入),我正在寻找其他方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2017-08-08
  • 2020-10-30
  • 2011-02-10
相关资源
最近更新 更多