将长字符串转换为整数而不使用parseLong或parseInt

时间:2012-12-05 14:41:49

标签: java converter binaryfiles integer-overflow bit-masks

这是情况......我有一个包含32位二进制字符串的二进制文件(例如1011011100100110101010101011010),我想将其转换为整数...我已经尝试用parse-Int来做但如果最重要的值是1,我得到一个负数,我不想那...然后我尝试用解析 - 龙,它没关系,但在那之后,当我得到这个整数,我必须发送到另一个只能接收整数的类,因此我从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();
     }

提前谢谢你......

1 个答案:

答案 0 :(得分:3)

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

中存储31位正整数

即使你将这样的值分配给long(long x = 0xFFFFFFFF,将为-1),符号位也会扩展,现在你有负长(你可以写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