Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

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

それぞれ意図した動きになっています!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。