2012-06-29 18 views
1

我嘗試下面的代碼:如何從基地32字符串解碼爲BigInteger

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 
+5

該網站吐出2^31-1,所以我高度懷疑他們在內部做32位有符號數學,當然溢出。沒有實際計算任何東西,我會說你得到的結果看起來更像是一個合理的結果比2^31-1 – fvu

+0

不是一個真正的問題。您發佈的任何字符串都不是以base-32爲基數。最後一個看起來像base-64。 – EJP

回答

1

你在做什麼是正確的... 假設Base32字符串來自Base32編碼一個字節你從調用BigInteger.toByteArray()得到的數組。

BigInteger(byte[] val)並不真正接收任意字節的數組。代表BigInteger需要byte[]。另外,它假定最重要的字節在val[0])。

0

如果它是基數爲32的X,Y和Z不應該在那裏。你確定它不是base-36嗎?