数値を16進数表記したい場合、int型ではInteger.toHexStringメソッドを、long型ではLong.toHexStringメソッドが利用できます。基数16の符号なし整数が文字列として返されるので、もし、10進数の「-10」→16進数の「-A」というように、負の数のときはマイナス符号を付けた形式にしたければ、下図のような小さなメソッドを作ると便利です。
しかし、実数型においてはこのようなメソッドはありません(※)。よって、10進数の「-255.5」→16進数の「-ff.8」というように、小数点を含む数値を16進数表記したり、long型の範囲を超える値を16進数表記するには、このような機能を持つクラスライブラリを探し求めるか、自前で作成することになります。手順は以下のとおりです。
- 整数部を基数(16)で割った余りを得て16進数化し、この整数商に対して同様の手順を、整数商が0になるまで繰り返しつつ連結する。
- 小数点以下と基数(16)の積の整数部を得て16進数化し、積の小数点以下に対して同様の手順を、積の小数点以下が0になるまで繰り返しつつ連結する。
一例として、double型の実数を渡すと、16進数表記を返すメソッドを試作しました。負の数のときはマイナス符号を付ける形式とし、小数部が無限小数になる可能性があることから、小数点以下8けたまで求めるようにしてあります。
※実数をIEEE754浮動小数点表記形式に変換して、16進数で得ることを、実数の16進数変換と呼んでいる場合もあるようです。double型の場合、下記のように2つのメソッドを組み合わせると得られます。
String Long.toHexString(Double.doubleToRawLongBits( double )) 例:10進数の「-255.5」→16進数の「c06ff00000000000」。
Copyright © ITmedia, Inc. All Rights Reserved.