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

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

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

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

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をそのまま出力すると、”[[email protected]”と表示されてしまいます。正しく値を取得する場合は、ループで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への型変換の方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説