【问题标题】:How do I decode a string from base 32 to a BigInteger如何将字符串从 base 32 解码为 BigInteger
【发布时间】:2012-07-01 11:04:59
【问题描述】:

我尝试了以下代码:

import java.math.BigInteger;
import org.apache.commons.codec.binary.Base32;
import org.junit.Test;

public class Sandbox
{
  @Test
  public void testSomething() {
    String sInput = "GIYTINZUHAZTMNBX";

    BigInteger bb = new BigInteger(new Base32().decode(sInput));

    System.out.println("number = " + bb);
  }
}

输出如下:

number = 237025977136523702055991

使用this website to convert between base 32 我得到的结果与实际输出不同。根据我从网站上得到的结果,这是我希望看到的结果:

expected output = 2147483647

知道为什么会这样吗?

编辑:

请原谅我故意尝试转换 2^31-1 造成混乱。

使用我之前链接的转换网站,我更改了输入:

String sInput = "GE4DE===";

预期输出:

number = 182

实际输出:

number = 3225650

【问题讨论】:

  • 那个网站吐出 2^31-1 所以我高度怀疑他们在内部做 32 位有符号数学,当然溢出。在没有实际计算任何东西的情况下,我会说你得到的结果看起来更像是一个合理的结果,而不是 2^31-1
  • 不是一个真正的问题。您发布的所有字符串都不是以 32 为基数的。最后一个看起来像 base-64。

标签: java biginteger base32


【解决方案1】:

您所做的是正确的... 假设 Base32 字符串来自 Base32 编码的字节数组,您从调用中获得 BigInteger.toByteArray()

BigInteger(byte[] val) 并不真正采用任意字节数组。它采用byte[] 表示BigInteger。此外,它假设最高有效字节在val[0])。

【讨论】:

    【解决方案2】:

    如果它是 base-32,则 X、Y 和 Z 不应该存在。你确定它不是 base-36 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 2012-07-08
      • 1970-01-01
      • 2017-04-15
      • 2013-03-20
      • 1970-01-01
      相关资源
      最近更新 更多