web-dev-qa-db-ja.com

Javaで16進文字列をlongに変換する方法は?

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に変換する方法はありますか?それとも本当に不可能なことをしようとしていますか!!

ありがとう!

42
user405398

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

81

ParseLongを使用します。

Long.parseLong(s, 16)
40
Erik
_new BigInteger(string, 16).longValue()
_

SomeLongの値の場合:

_new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
_

言い換えると、これは、long値(負の数を含む)に対してLong.toHexString()に送信したlongを返します。また、longよりも大きい文字列を受け入れ、文字列の下位64ビットをlongとしてサイレントに返します。入力がlongに収まることを確認する必要がある場合は、文字列の長さ<= 16(空白のトリミング後)をチェックするだけです。

11
Bobby

Long.parseLong(s, 16)"7fffffffffffffff"までしか機能しません。代わりにBigIntegerを使用します。

public static boolean isHex(String hex) {
    try {
        new BigInteger(hex, 16);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}
3
quezacoatl