我尝试了以下代码:
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
答案 0 :(得分:1)
你正在做的是正确的...... 假设Base32字符串来自Base32编码你通过调用 BigInteger.toByteArray()
获得的字节数组。
BigInteger(byte[] val)
并不真正采用任意字节数组。它需要byte[]
的{{1}}表示。此外,它假设最重要的字节在BigInteger
)。
答案 1 :(得分:0)
如果它是32,则X,Y和Z不应该在那里。你确定它不是36号基地吗?