2015-06-11 28 views
1

我試圖從二進制字符串解析一個潛在的Long值,但是當我嘗試這樣做時仍然出現錯誤。Long.parseLong錯誤

public String func1(String B, String C, String D) 
{ 
    long b = Long.parseLong(B, 2); 
    long c = Long.parseLong(C, 2); 
    long d = Long.parseLong(D, 2); 

    String value = Long.toString((b & c) | (b & d), 2); 
    return value; 
} 

Exception in thread "main" java.lang.NumberFormatException: 
For input string: "1010101010101010101010101010101010101010/*....*/10101011" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Long.parseLong(Unknown Source) 
    ... 

任何人都可以解釋這一點嗎? 謝謝!

+1

那麼實際的字符串有多長? (我假設它不*實際*有'/*...*/'?) –

+0

爲了測試目的,字符串長度爲32位,但可以超過這個長度。 – BonBon

+0

但是您是否確實已驗證字符串長度不超過64(如果第一個字符爲1,則爲63),並且字符是否有效(零和1,可選減號)? – RealSkeptic

回答

2

的常量保持最大值長可以有2^63 - 1。

所以,你可以轉換爲長着2基數的最後一個字符串爲: 「111111111111111111111111111111111111111111111111111111111111111」

如果你會嘗試解析大於它的值,你會得到java.lang.NumberFormatException