私のコードは単純です:
int idec = Integer.parseInt(value, 16);
値として「01dae610」を入力すると、「31122960」が正しく取得されます。値「d149e510」を入力すると、java.lang.NumberFormatException が発生します。正しい値は「3511280912」です。
これがなぜなのか、私にはわかりません。誰か助けてくれませんか?
の範囲外だからですint
。代わりにlong
/を使用してください。Long
int
Javaで署名されているため、最大値は 2 31 - 1 です。
使用Long.parseLong(value, 16)
すると、目的の値が得られます。int
正しいビット パターンを取得できて満足しているが、代わりに負の値として解釈される場合は、キャスト バックできます。
の範囲外だからですint
。long
代わりにデータ型を使用する必要があります。
Integer.MAX_VALUE
は 2147483647 であり、予想した値よりも低くなっています。したがって、この文字列は、に解析できるものを表していませんint
。したがって、例外です。
ここから:
int データ型は、32 ビットの符号付き 2 の補数整数です。最小値は -2,147,483,648 で、最大値は 2,147,483,647 (包括的) です。
3,511,280,912 > 2,147,483,647 であり、NumberFormatException
.
ただし、を使用できますlong
。同じページから:
long データ型は、64 ビットの符号付き 2 の補数整数です。最小値は -9,223,372,036,854,775,808 で、最大値は 9,223,372,036,854,775,807 (包括的) です。