首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

解決 Java 中 java.lang.NumberFormatException:十六進制字串轉換超出 int 範圍的解決方案

     編輯:Java 綜合教學

解決 Java 中 java.lang.NumberFormatException:十六進制字串轉換超出 int 範圍的解決方案

在專案開發中,常遇到需要將十六進制字串轉換為十進制數值的需求。許多開發者會直接使用 Integer.parseInt(str1.trim(), 16) 來處理,但這往往會拋出 java.lang.NumberFormatException 異常,讓人花費大量時間排查。

問題根因

這個異常的核心原因是:十六進制字串表示的數值超出了 int 型別的取值範圍(-2^31 到 2^31-1)。當輸入的十六進制字串對應的十進制數值大於 Integer.MAX_VALUE 時,Integer.parseInt 就會拋出異常。

解決方案:使用 BigInteger

Java 提供了 java.math.BigInteger 類別,專門用於處理任意精度的整數運算,完美解決這個問題:

BigInteger big = new BigInteger(str1.trim(), 16);

BigInteger 的建構子接受基數參數(此處為 16 表示十六進制),能夠正確解析任意長度的十六進制字串,不會發生溢位。

使用建議

  • 當不確定輸入十六進制字串的長度或數值範圍時,優先使用 BigInteger
  • 若確定數值在 int 範圍內,可繼續使用 Integer.parseInt 以獲得更好效能
  • 轉換後可透過 big.longValue()、big.intValue() 或 big.toString() 取得所需型別的結果

這個簡單的替換能徹底解決十六進制字串轉換溢位問題,避免不必要的除錯時間浪費。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved