gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:51:29 27 4
gpt4 key购买 nike

情况是这样的……我有一个包含 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();
}

提前致谢...

最佳答案

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

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

关于java - 不使用 parseLong 或 parseInt 将长字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com