Javaで16進文字列をlongに変換したい。
私は一般的な変換を試みました。
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
しかし、私はこのエラーメッセージを受け取っています:
Java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Javaで文字列をlongに変換する方法はありますか?それとも本当に不可能なことをしようとしていますか!!
ありがとう!
Long.decode(str)
はさまざまな形式を受け入れます。
次の文法で指定された10進数、16進数、8進数を受け入れます。
デコード可能な文字列:
- 符号opt 10進数
- 符号opt 0x HexDigits
- 符号opt 0X HexDigits
- 符号opt #HexDigits
- 符号opt 0 OctalDigits
符号:
- -
しかし、それが役に立たないあなたの場合、あなたの文字列は長く保持できる範囲を超えています。 BigInteger
が必要です:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
出力:
23846102773961507302322850521
比較のために、 Long.MAX_VALUE
:
9223372036854775807
ParseLongを使用します。
Long.parseLong(s, 16)
_new BigInteger(string, 16).longValue()
_
SomeLongの値の場合:
_new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
_
言い換えると、これは、long
値(負の数を含む)に対してLong.toHexString()
に送信したlong
を返します。また、long
よりも大きい文字列を受け入れ、文字列の下位64ビットをlong
としてサイレントに返します。入力がlong
に収まることを確認する必要がある場合は、文字列の長さ<= 16(空白のトリミング後)をチェックするだけです。
Long.parseLong(s, 16)
は"7fffffffffffffff"
までしか機能しません。代わりにBigInteger
を使用します。
public static boolean isHex(String hex) {
try {
new BigInteger(hex, 16);
return true;
} catch (NumberFormatException e) {
return false;
}
}