在專案開發中,常遇到需要將十六進制字串轉換為十進制數值的需求。許多開發者會直接使用 Integer.parseInt(str1.trim(), 16) 來處理,但這往往會拋出 java.lang.NumberFormatException 異常,讓人花費大量時間排查。
這個異常的核心原因是:十六進制字串表示的數值超出了 int 型別的取值範圍(-2^31 到 2^31-1)。當輸入的十六進制字串對應的十進制數值大於 Integer.MAX_VALUE 時,Integer.parseInt 就會拋出異常。
Java 提供了 java.math.BigInteger 類別,專門用於處理任意精度的整數運算,完美解決這個問題:
BigInteger big = new BigInteger(str1.trim(), 16);
BigInteger 的建構子接受基數參數(此處為 16 表示十六進制),能夠正確解析任意長度的十六進制字串,不會發生溢位。
BigIntegerint 範圍內,可繼續使用 Integer.parseInt 以獲得更好效能big.longValue()、big.intValue() 或 big.toString() 取得所需型別的結果這個簡單的替換能徹底解決十六進制字串轉換溢位問題,避免不必要的除錯時間浪費。