1

这是情况...我有一个包含 32 位二进制字符串的二进制文件(例如 1011011100100110101010101011010 ),我想将其转换为整数...我已经尝试使用 parse-Int 来实现,但如果最重要的值是 1,我得到一个负数,我不想要那个......然后我用 parse-Long 尝试了它,没关系,但之后当我得到这个整数时,我必须将它发送到另一个类只能接收整数,因此我从 long 转换为 int 并且我再次返回一个负整数......唯一的方法是使用我发现的一段代码做相反的事情(从 int 到string ) 但我不明白如何更改-转换它。这是关于我不知道很多事情的面具。

这是代码:

    private static String intToBitString(int n) {
         StringBuffer sb = new StringBuffer();
         for (int mask = 1 << 31; mask != 0; mask = mask >>> 1)
             sb.append((n & mask) == 0 ? "0" : "1");
         return sb.toString();
     }

先感谢您...

4

1 回答 1

2

最高位设置为 1 的整数是负整数,与位数无关。只需将标题零添加到字符串中,或​​者使用按位与 (x & 0x7FFFFFFF) 清除最高位。您只能在 java int 中存储 31 位正整数。

即使您将这样的值分配给 long(long x = 0xFFFFFFFF,将为 -1),符号位也会扩展并且现在您有负 long(但是您可以写入 0x0FFFFFFFFL 以将预期的 00000000FFFFFFFF 分配给 long)。如果这是不受欢迎的行为,您仍然需要清除高位。

    int a = 0x80000007; // High bit 1 - negative!
    long b = a; // Sign expands!
            // Clearing high bits (mind leading 0 and 
            // the long type suffix (L) in the hex constant:
    long c = b & 0x0FFFFFFFFL; 
    System.out.println(a + ":" + Long.toHexString(b) + ":"
            + Long.toHexString(c));

输出:-2147483641:ffffffff80000007:80000007

于 2012-12-05T14:47:23.967 回答