【Java】Stringとbyte配列の変換方法まとめ

JavaでString型とbyte型の型変換の方法を知りたい
SJISやASCIIなどの文字コードを指定して変換する方法が知りたい
char型とbyte型の変換方法も知りたい

JavaのStringはプログラミングをする上で使用頻度が高いクラスの一つです。Stringを扱う上で、文字列をbyte型に変換したり、byte配列を文字列に変換するいった対応が必要になることがあります。

そこで今回は、String型からbyte型への型変換の方法をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

Stringとbyte配列の変換

ここでは、String型とbyte型の相互変換の方法を詳しく解説します。

byte→String変換

byte型からString型へ変換するためには、Stringクラスのコンストラクタを使用します。Stringのコンストラクタの引数にbyte型を指定することで、String型へ変換することができます。

以下にbyte型からString型へ変換する方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {
        
        byte[] sbyte = "12345".getBytes();
        String str = new String(sbyte);

        System.out.println("str : " + str);
    }
}

実行結果

str : 12345

サンプルではbyte型を宣言して値を設定し、String型を宣言してStringのコンストラクタに引数でbyte型の変数を指定しています。byte型からString型への型変換は、Stringのコンストラクタを使用することで、指定した型へ変換することが可能です。

String→byte変換

String型からbyte型へ変換するためには、getBytesメソッドを使用します。

以下にgetBytesメソッドを使用して、String型からbyte型へ変換する方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {
        
        String str = "apple";
        byte[] sbyte = str.getBytes();

        for(int i=0; i<sbyte.length; i++)
        {
            System.out.println(sbyte[i]);
        }
    }
}

実行結果

97
112
112
108
101

サンプルではString型を宣言して値を設定し、byte型を宣言してgetBytesメソッドを使用してString型の値をbyte型に変換しています。

String型からbyte型変換時に、ループで回さずにbyte型配列sbyteをそのまま出力すると、”[B@15db9742”と表示されてしまいます。正しく値を取得する場合は、ループでbyte型の配列の要素を1つずつ取り出す必要があります。

また、byte型(バイナリデータ)で表現できる値は10進数で-128から127までとなっていますが、バイナリデータを解析するときは10進数よりは16進数に変換したほうが、都合が良い場合もあります。

バイナリデータを16進数に変換する場合は、toHexStringメソッドを使用すれば簡単に変換できます。

サンプルプログラムのSystem.out.printlnの部分を以下のように変更します。

System.out.println(Integer.toHexString(sbyte[i]));

実行結果

61
70
70
6c
65

文字コードを指定して変換する

String型⇔byte型変換時に、変換した文字列を異なるOS間でやり取りした場合、文字化けが発生する可能生もあります。

例えば、Windowsで変換した文字列をLinuxで出力した場合、文字コードがShift_JISのままでは文字化けして表示される可能性もあります。

そのような問題を防ぐため、getBytesメソッドには文字コードを指定して変換することが可能です。

以下に文字コードを指定した変換方法を記述します。

String str = "apple";
byte[] sbyte = str.getBytes("UTF-8");

この例ではgetBytesメソッドに文字コード”UTF-8″を指定していますが、Shift_JISヘ変換する場合は”ISO-8859-1″を、ASCIIで変換する場合は”US-ASCII”を使用します。

charとbyte配列の変換

byte→char変換

byte型からchar型へ変換するためには、byte型の値をchar型へキャストすることで簡単に型変換ができます。

以下にキャストを使用しての変換方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {
        
        byte b = 100;
        char c = (char)b;
        System.out.println("c : " + (int)c);
    }
}

実行結果

c : 100

char→byte変換

char型からbyte型への変換は、String型のgetBytesメソッドを使用する必要があるため、まずchar型をString型に変換する必要があります。

以下にchar型からbyte型へ変換する方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {
        
        char c = 'a';
        String str = String.valueOf(c);
        byte b[] = str.getBytes();
        
        for(int i=0; i<b.length; i++)
        {
            System.out.println("b : " + b[i]);
        }
    }
}

実行結果

b : 97

サンプルではchar型の値を宣言して値を設定し、valueOfメソッドを使用してString型に変換しています。

次にString型の変数に対してgetBytesメソッドを使用してbyte型の配列に変換しています。

Stringのさまざまな型変換

String型の型変換は、今回紹介したdouble型以外にもさまざまな型で変換することが可能です。Stringの型変換については以下の記事で詳しく説明しています!

Stringについてもっと詳しく知りたい方へ

Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

String⇔byte型へ変換する基本的な方法や注意点文字コードを指定する方法などを説明しました。

Stringからbyte型変換は、さまざまな場面で使用することがあると思います。もし、Stringからのbyteへの型変換の方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次