私のコードは単純です:
int idec = Integer.parseInt(value, 16);
値として「01dae610」を入力すると、「31122960」が正しく取得されます。値「d149e510」を入力すると、java.lang.NumberFormatException が発生します。正しい値は「3511280912」です。
これがなぜなのか、私にはわかりません。誰か助けてくれませんか?
の範囲外だからですint。代わりにlong/を使用してください。Long
intJavaで署名されているため、最大値は 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 (包括的) です。