Clojure/Java で 16 進文字列 (SHA256 ダイジェストなど) を long に変換するにはどうすればよいですか?
これにより、java.lang.NumberFormatException
次のようになります。
(Long/parseLong "4590d31a9cf5eb30997501f82b1b8db051c01f7ea8a2c413343f2c1b9f5aa04e" 16)
これは機能し、BigInteger になります。
(BigInteger. "4590d31a9cf5eb30997501f82b1b8db051c01f7ea8a2c413343f2c1b9f5aa04e" 16)
ジョンが上で指摘したように、ロングが必要な場合は損失の多い変換になります。
Along
は 64 ビットのみです。SHA-256 ダイジェストには 256 ビットがあります (名前の由来)。いいえ、その変換を (可逆的に) 実行することはできません。
(たとえば) 下位 64 ビットだけが必要な場合は、最後の 16 桁の 16 進数を取得して解析するか、全体をバイト配列に変換して、その配列から 8 バイトを long に変換することができます。
整数が必要な場合は、BigInteger
代わりに検討する必要があります。Java のどのプリミティブ型も 256 ビットを処理しません。