torutkのブログ

ソフトウェア・エンジニアのブログ

16進数文字列から整数型への変換

Javaだと結構悩みます。
ここでは4桁の16進数を整数型に変換する例で考えてみます。

  1. java.lang.ShortクラスのparseShortメソッドを使う
  2. java.lang.Shortクラスのdecodeメソッドを使う

まず標準APIの範囲では上記が見つかりました。

  // 方法 1.
  short value1 = Short.parseShort("1F7C", 16);
  // 方法 2.
  short value2a = Short.decode("0x20BC");
  short value2b = Short.decode("#7BA0");

しかし、問題があります。16進4桁の文字列が、最上位ビットが1となるような値(符号なしで0x8000より大きい値)の場合、NumberFormatExceptionが発生します。これは、Short型の最大値である32767を超えるためです。
そこで、より大きい整数型で変換し、本来の整数型へキャストで変換(上位ビットを落とす)する方法で回避します。

  // 方法 1.の場合
  short value1 = (short)Integer.parseInt("FB18", 16);
  // 方法 2.
  short value2a = (short)Integer.decode("0x20BC");
  short value2b = (short)Integer.decode("#7BA0");