我尝试了以下代码:
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
最佳答案
您所做的事情是正确的...假设 Base32 字符串来自于调用调用获得的 Base32 编码字节数组 BigInteger.toByteArray()
。
BigInteger(byte[] val)
并不真正采用任意字节的数组。它采用 BigInteger
的 byte[]
表示形式。此外,它假设最高有效字节位于 val[0]
中)。
关于java - 如何将字符串从基数 32 解码为 BigInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269861/