当前位置: 首页 > 知识库问答 >
问题:

整数解析大数并保留符号?

钦高峯
2023-03-14

我正在使用十六进制值,我需要保留值的符号。我想知道是否有人有一种创造性的方法来保留整数的符号,而不使用biginger?由于大小限制,我无法使用<code>BigInteger

我有一串十六进制值,如下所示:55844d000000000080027d801cf6380006f416c0c23d3e4000000000

    String          ssumI = null;
    String          ssumQ = null;
    String          sazI   = null;
    float           isumI = 0;
    float           isumQ = 0;
    float           iazI  = 0;

    ssumI = data.substring(0,8); 
    isumI = (float)(Integer.parseInt(ssumI, 16)/Math.pow(2,bits));
    //55844d00 parses fine

    ssumQ = data.substring(8,16); 
    isumQ = (float)(Integer.parseInt(ssumQ, 16)/Math.pow(2,bits));
    //00000000 parses fine

    sazI = data.substring(16, 24); 
    iazI = (float)(Integer.parseInt(sazI, 16)/Math.pow(2,bits));
    //80027d80 fails - NumberFormatException
    //should be -1,036,173,760 and in the int range

我没有正确理解故障吗?失败似乎是由于设置了符号位。

共有2个答案

祁曦哲
2023-03-14

如果 Java 8 可用,则可以在其中使用新的无符号操作(如何在 java 8 中使用无符号整数?

isumI = (float)(Integer.parseUnsignedInt(ssumI, 16)/Math.pow(2,bits));

但是由于每个字符串都有32位,我想bit小于32。在这种情况下,您可以将其重写为

isumI = Integer.parseUnsignedInt(ssumI, 16)/(float)(1 << bits);

如果可以大于 32(但小于 64),请将 1 替换为 1L

此外,请注意,函数中的位是不变的,您应该替换<code>Math。pow(2位)1

无论如何,如果您打算将字符串用作大值,那么您应该将其存储在int数组中。浮动只有24位的意义,如果值很大,您可能会丢失低8位。

令狐献
2023-03-14

如果您想一次存储32位,在我看来,显而易见的解决方案是使用Long.parseLong进行解析:

isumI = (float)(Long.parseLong(ssumI, 16) / Math.pow(2, bits));

(你肯定想把这些值保持为浮动吗?你正在以这种方式丢失信息...)

 类似资料:
  • 问题内容: 我正在解析包含数字字符实体字符的XML,例如(但不限于)Java中的(换行符回车<>)。解析时,我将节点的文本内容附加到StringBuffer上,以便稍后将其写到文本文件中。 但是,当我将String写入文件或打印出文件时,这些unicode字符会被解析或转换为换行符/空格。 在Java中遍历XML文件的节点并将文本内容节点存储到String时,如何保留原始的数字字符实体字符符号?

  • rank ▲ ✰ vote url 33 526 73 660 url 把字符串解析成浮点数或者整数 在Python里,怎么样把一个数字型字符串像"545.2222"解析成对应的浮点值545.2222?或者把一个"31"解析成31? 我只是想知道怎么样才能解析一个浮点型字符串编程浮点数,或者整型字符串转换成整型? >>> a = "545.2222" >>> float(a) 545.222200

  • 我试图在Java程序中格式化一些数字。这些数字将同时是双精度和整数。在处理double时,我只想保留两个小数点,但在处理整数时,我希望程序不影响它们。换句话说: 双重输入 双打-输出 整数-输入 整数-输出 有没有办法在同一个DecimalFormat实例中实现这一点?到目前为止,我的代码如下:

  • 正如你从标题中所看到的,我正在努力对因子为2个素数的大整数进行强制因子分解。我想知道是否有一种方法可以在for循环中使用for循环。我知道这是一种很糟糕的方式,但无论如何我都愿意这样做。(我本来打算使用费马分解定理,但如果没有一些额外的方法/库,你就不能求大整数,我无法做到这一点),所以请尝试一下,看看你是否可以帮助我。大致如下: 显然,这太可怕了,我知道你不能通过说i.nextPossibleP

  • 我有一个字符串 我想将加法与数字分开,以便我可以将其保留在其他字段中。如何在不丢失数字或加法的情况下拆分此值?最后,我想有 2 个具有以下类型的字段: 关于这个有很多问题,但是我找不到两个值都必须保存的问题。这就是为什么我创建了一个新问题。