これ、絶対はまるやつ結構いると思うんだけどなぁ。javaめ。
まず、説明のため順序的にLong->16進数ね。
1 2 | Long l = new Long(- 1 ); String s = Long.toHexString(l); |
で、今回のお題は、16進数->Longなので、とりあえずこうするわね。
1 | Long rev = Long.parseLong(s, 16 ); |
{なぬーっ。そんなアホなーーっ。}
どうやら、parseLongは、sの中身を正の値だと決めてかかっているようで、"7fffffffffffffff"より大きい文字列を入れるとエラーになる仕様。
Long.decodeも試してみたが、同仕様。
{どうしよう。とほほ。}
ちなみに、
1 | Long ll = Long.parseLong( "-ff" , 16 ); |
で、なぜかいろいろググっても解決できなかったのだが、コードをごねごねいじってたらラッキーにも打開策を発見した。
答えは、
1 | Long rev = ( new java.math.BigInteger(s, 16 )).longValue(); |
ナイス、BigInteger.longValue()!!
こいつの仕様に助けられた。
あとは、勝手にlongValue()の仕様が変らないことを祈るだけだ。
0 件のコメント :
コメントを投稿