実数値を16進数表記するメソッドを作るにはJavaTips 〜Javaプログラミング編

» 2006年11月01日 10時00分 公開
[平野正喜@IT]

 数値を16進数表記したい場合、int型ではInteger.toHexStringメソッドを、long型ではLong.toHexStringメソッドが利用できます。基数16の符号なし整数が文字列として返されるので、もし、10進数の「-10」→16進数の「-A」というように、負の数のときはマイナス符号を付けた形式にしたければ、下図のような小さなメソッドを作ると便利です。

int型、long型の数値を符号付きで16進数表記するtoHexメソッドの一例 int型、long型の数値を符号付きで16進数表記するtoHexメソッドの一例

 しかし、実数型においてはこのようなメソッドはありません(※)。よって、10進数の「-255.5」→16進数の「-ff.8」というように、小数点を含む数値を16進数表記したり、long型の範囲を超える値を16進数表記するには、このような機能を持つクラスライブラリを探し求めるか、自前で作成することになります。手順は以下のとおりです。

  1. 整数部を基数(16)で割った余りを得て16進数化し、この整数商に対して同様の手順を、整数商が0になるまで繰り返しつつ連結する。
  2. 小数点以下と基数(16)の積の整数部を得て16進数化し、積の小数点以下に対して同様の手順を、積の小数点以下が0になるまで繰り返しつつ連結する。

 一例として、double型の実数を渡すと、16進数表記を返すメソッドを試作しました。負の数のときはマイナス符号を付ける形式とし、小数部が無限小数になる可能性があることから、小数点以下8けたまで求めるようにしてあります。

int型、long型の数値を符号付きで16進数表記するtoHexメソッドの一例 int型、long型の数値を符号付きで16進数表記するtoHexメソッドの一例

※実数をIEEE754浮動小数点表記形式に変換して、16進数で得ることを、実数の16進数変換と呼んでいる場合もあるようです。double型の場合、下記のように2つのメソッドを組み合わせると得られます。

String Long.toHexString(Double.doubleToRawLongBits( double ))
例:10進数の「-255.5」→16進数の「c06ff00000000000」。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。