バイト型配列(byte[])を文字列(string)に変換する(バイナリと文字列の変換)[C#]

バイト配列自体が通常のプログラムではあまり使用しませんが、テキストファイルのデータをバイト型の配列に読み込んだり、制御関連のプログラムを作成する場合には、バイト配列を使用することもあるかと思います。

バイト配列とは、要素がバイト(byte)型の配列です。
byte型はC#のプリミティブ型の1つで、-128~127(10000000~01111111)までの範囲の値を取ることができます。
バイト型はバイナリデータを扱う際などに使用します。

バイト型のデータは文字列に変換することも可能で、バイト型配列のデータを文字列に変換する方法が.NET Frameworkには標準で用意されています。

そこで今回は、バイト型の配列(byte[])を文字列(string)に変換する方法について紹介します。

System.Text.Encoding.GetString

バイト配列を文字列に変換するには、System.Text名前空間にあるEncodingクラスのGetStringメソッドを使用します。

GetStringメソッドのシグネチャ次のようになります。

GetStringメソッドは引数(パラメーター)にバイト型の配列(byte[])を指定することで、文字列に変換して返してくれます。

System.Text.Encoding.GetChars

文字列に変換する処理は、GetStringメソッドを同じ名前空間のSystem.TextにあるGetCharsメソッドを使用することもできます。

GetCharsメソッドは引数に結果の文字のセットを格納する文字の配列(char[])を渡すことで、文字配列を格納してくれます。

GetCharsメソッドのシグネチャ次のようになります。

GetCharsメソッドの引数(パラメーター)はいくつかありますが

  • 第1引数にはデコード対象のバイト シーケンスが格納されたバイト配列
  • 第2引数にはデコードする最初のバイトのインデックス
  • 第3引数にはデコードするバイト数
  • 第4引数には結果の文字のセットを格納する文字配列
  • 第5引数には結果の文字のセットを書き込む開始位置のインデックス

を指定します。

バイト型配列を文字列に変換するサンプル

以下にEncodingクラスのGetStringメソッドとGetCharsメソッドを使用して、ファイルからテキストを読み込んで画面に表示するサンプルプログラムを示します。
ここでは、簡単なWindowsフォームアプリケーションを作成し、画面で指定されたファイルパスをもとにファイルからデータをバイト配列に読み込み、それを文字列(String)に変換して画面に表示します。

フォームデザイン(画面構成)

バイト型配列を文字列型に変換するサンプルプログラムの画面(フォーム)デザイン

フォームには、ファイルのパスを入力するテキストボックス(textBox1)と、ファイルからバイト配列にデータを読み込んで文字列に変換するボタン(button1)と、変換した文字列を表示するためのテキストボックス(textBox2)を配置しています。
(文字列の変換結果を表示するテキストボックスは、Multilineプロパティをtrueに設定して、複数行の文字列を表示できるようにしています。)

ソースコード(Form1)

フォームのソースコードは次にようになります。

上記のサンプルプログラムでは、フォームに配置したボタンがクリックされた時のイベント処理でReadメソッドを呼び出して処理をしています。(41行目)

Readメソッドでは、ファイルパスのテキストボックスに入力された値(ファイルのパス)をもとに、System.IO名前空間にあるFileStreamクラスを使用してデータを読み込んでいます。
ファイルのサイズが小さい場合は1回で読み込みますが、大きい場合は複数回に分けて読み込んでいます。
ファイルを複数回に分けて読み込む処理はReadFromBufferというメソッドを作成して呼び出しています。(70行目)

1回で読み込める場合は、GetStringメソッドを使用して文字列に変換しています。
複数回に分けて読み込む場合は、GetCharsメソッドを使用して文字の配列を取得し、配列をもとに文字列(string)のインスタンス(オブジェクト)を生成しています。

サンプルプログラムの実行結果

サンプルプログラムを実行します。
読み込むテキストファイルには、以下のデータが入力されているものとします。

■■■■■■■■■■■■■■■■■■■■■■■■
 バイト配列を文字列に変換するサンプルで使用するテキスト
■■■■■■■■■■■■■■■■■■■■■■■■

GetStringメソッドとGetCharsメソッドを使用すると
バイト型の配列を文字列型に変換することができます。

■■■■■■■■■■■■■■■■■■■■■■■■

ファイルパスを入力して、「読み込み」ボタンをクリックして実行します。
実行するとテキストファイルの値を読み込んで、、複数行のテキストボックスに文字列が表示されることが確認できます。

バイト型配列を文字列型に変換するサンプルプログラムの実行結果

バイト型の配列を文字列型に変換する際の注意点

バイト配列を文字列に変換する際に注意する点があります。

バイト型の配列から文字列型に変換する際には文字のエンコーディングを合わせる必要があります。
上記の例(サンプルプログラム)では、テキストファイルのデータをバイト配列に読み込んで文字列に変換する際にUTF-8エンコーディングを使用していますが、データを読み込むファイルのエンコーディングがUTF-8でなければ、正しく文字列に変換することができません。

C#(.NET Framework)での文字列(string)はUnicode(UTF-8)で扱われますが、Windowsで動作するテキストエディターでは、デフォルトがShift-JISになっている場合も多くあります。

上記のサンプルプログラムを動作させる際には、テキストファイルのエンコーディングをUTF-8にしないと正しく文字列に変換するころができません。
テキストファイルのエンコーディングが違う場合は、読み込むテキストファイルのエンコードに合わせたオブジェクトを用意する必要があります。

以下に代表的なエンコーディングのオブジェクトを作成する例をいくつか示しておきます。

文字のエンコーディングの種類については、以下の記事も合わせてご覧ください。

文字列のエンコーディング Encodingクラス [C#]
ファイルの入出力プログラムを作成していると、ファイルの読み書きなどで文字コードを指定したい場合があります。 今回は、C#(.NET F...

参考URL
Encoding.GetString メソッド
Encoding.GetChars メソッド