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への型変換の方法を忘れてしまったら、この記事を思い出してくださいね!