Javaで16進数のテキストをint型に変換する方法は、ググればあらゆる所に書いてある。なので、何も考えず、
Integer.parseInt("16進数文字列", 16);
としたところ、java.lang.NumberFormatExceptionを吐いてしまう時がある。調べてみたところ、"79999999"までは問題ない。"80000000"以上になると例外を吐く。お察しの良い方ならお気づきかと思うが、負数の表し方が2の補数表現だとparseIntできないらしい。(常識?)
例えば0xFFFFFFFF==-1だが、これを表すには"-00000001" (※"-1"でもよい)、0x80000000==-2147483648だが、これを表すには"-80000000"と表す必要がある。Integer.toHexString(int i)では2の補数表現で表わされるので、非常に変換が面倒臭い。特に困るのがRGBAをintで表したい時で、これで悩んでいた。
仕方なく以下のようにすることで解決した。
(int)Long.parseLong("16進数文字列", 16);
parseIntとtoHexStringをどちらも使っている場合は、このケースを忘れないようにしなければ…
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme