这是情况......我有一个包含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();
}
提前谢谢你......
答案 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