Javaの16進数の変換方法
この記事では、Javaの16進数を変換する方法を解説します。
まずは、16進数を10進数や2進数、8進数に変換してみましょう。
10進数→16進数に変換
10進数を16進数に変換するには、IntegerクラスのtoHexStringメソッドを使います。
toHexStringメソッドは、整数の引数の文字列表現を、基数16の符号なし整数として返すメソッドです。
実際に、変換してみると次のように書けます。
■記述例 public class Main { public static void main(String args[]){ int i = 1234; String hex = Integer.toHexString(i); System.out.println("10進数:" + i + " => 16進数:" + hex); } }
ここでは、int型の整数 1234 を16進数表記にしてみました。
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 10進数:1234 => 16進数:4d2
16進数に変換されていますね!
16進数→10進数に変換
一方、16進数を10進数に変換するには、IntegerクラスのparseIntメソッドを使います。
parseIntメソッドは、文字列の引数を符号付き10進数の整数型として返すメソッドです。
第二引数を指定することで、2番目の引数に指定された基数をもとにして、文字列の引数を符号付き整数として返します。
実際に記述してみると、次のように書けます。
■記述例 public class Main { public static void main(String args[]){ String hex = "fedc"; int i = Integer.parseInt(hex, 16); System.out.println("16進数:" + hex + " => 10進数:" + i); } }
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 16進数:fedc => 10進数:65244
16進数は2進数・8進数にも変換可能
16進数は、2進数や8進数にも変換可能です。
2進数に変換する場合は、IntegerクラスのtoBinaryStringメソッドを使います。
8進数に変換する場合は、IntegerクラスのtoOctalStringメソッドを使います。
記述方法は、次の通りです。
■記述例 public class Main { public static void main(String args[]){ String hex = "fedc"; int i = Integer.parseInt(hex, 16); System.out.println("16進数:" + hex + " => 2進数:" + Integer.toBinaryString(i)); System.out.println("16進数:" + hex + " => 8進数:" + Integer.toOctalString(i)); } }
変換するために、16進数を一度int型(10進数)に変換し、そこから2進数、8進数に変換しています。
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 16進数:fedc => 2進数:1111111011011100 16進数:fedc => 8進数:177334
それぞれ、ちゃんと変換できているのがわかります。
16進数と文字列の変換方法
ここでは、文字列を16進数表記に変換する方法を見ていきましょう。
具体的には次のように記述できます。
■記述例 import java.io.UnsupportedEncodingException; public class Main { public static void main(String args[]){ String str = "ポテパンスタイル"; for (char c : str.toCharArray()) { // 16進数表記で表示 System.out.println(Character.toString(c) + ":" + HexString(c).toUpperCase()); } } // 16進数に変換する関数 private static String HexString(char c) { try { String s = Character.toString(c); byte[] buf = s.getBytes("Windows-31J"); String result = "0x"; for (byte b : buf) { result += String.format("%02x", b); } return result; } catch (UnsupportedEncodingException e) { return "Exception"; } } }
文字列を16進数に変換するために、独自の関数を用意します。
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main ポ:0x837c テ:0x8365 パ:0x8370 ン:0x8393 ス:0x8358 タ:0x835e イ:0x8343 ル:0x838b
詳しい仕組みは以下の記事で解説しているので、気になる方はチェックしてみてください。
【関連記事】
▶︎【サンプル有】Javaの16進数表記の文字列を取得・変換する方法を解説
16進数を大文字に変換
16進数を大文字に変換したい場合は、toUpperCaseメソッドを使いましょう。
toUpperCaseメソッドは、小文字を大文字に変換します。
ここでは、16進数と文字列の変換方法で紹介した実行結果を大文字に変換してみましょう。
出力部分の記述を次のように変更します。
■記述例(一部抜粋) System.out.println(Character.toString(c) + ":" + HexString(c).toUpperCase()); ■実行結果 mbp:Desktop suzuka$ java Main ポ:0X837C テ:0X8365 パ:0X8370 ン:0X8393 ス:0X8358 タ:0X835E イ:0X8343 ル:0X838B
大文字に変換されているのがわかります。
16進数をASCII形式に変換
この章では、16進数をASCII形式に変換してみましょう。
こちらも独自の関数を作成し、実行することで変換を行います。
具体的な記述例は次の通りです。
■記述例 public class Main { public static void main(String args[]){ String asciiString = "style.potepan.com"; String hexEquivalent = "7374796c652e706f746570616e2e636f6d"; // 16進数表記 System.out.println("16進数表記 の hexEquivalent => " + hexEquivalent); System.out.println("16進数表記 の asciiString => " + asciiTohex(asciiString)); // ASCII形式 System.out.println("ASCII形式 の asciiString => " + asciiString); System.out.println("ASCII形式 の hexEquivalent => " + hexToascii(hexEquivalent)); } // ASCII形式から16進数 private static String asciiTohex(String asciiStr) { char[] c = asciiStr.toCharArray(); StringBuilder hex = new StringBuilder(); for (char ch : c) { hex.append(Integer.toHexString((int)ch)); } return hex.toString(); } // 16進数からASCII形式 private static String hexToascii(String hexStr) { StringBuilder ascii = new StringBuilder(""); for (int i = 0; i < hexStr.length(); i += 2) { String str = hexStr.substring(i, i + 2); ascii.append((char)Integer.parseInt(str, 16)); } return ascii.toString(); } }
ここでは、ポテパンスタイルのURLである「style.potepan.com」を16進数表記に、16進数表記の「style.potepan.com」をASCII形式にそれぞれ変換しています。
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 16進数表記 の hexEquivalent => 7374796c652e706f746570616e2e636f6d 16進数表記 の asciiString => 7374796c652e706f746570616e2e636f6d ASCII形式 の asciiString => style.potepan.com ASCII形式 の hexEquivalent => style.potepan.com
それぞれ意図した動きになっています!