C#でバイナリデータを取り扱う際、バイト配列を文字列に変換することはよくある作業です。このプロセスでは、バイトを解釈するために使用されるエンコーディングを指定する必要があります。UTF-8、ASCII、Unicodeなど、異なるエンコーディングでは文字が異なる方法で表現されるためです。エンコーディングを間違えると、出力結果が正しくないものになったり、文字化けが発生したりします。この記事では、Encoding.GetString()
とMemoryStream
の2つの主要な方法について説明します。
目次
Encoding.GetString()
を使用したバイト配列の文字列への変換
Encoding.GetString()
メソッドは、直接的で効率的なアプローチを提供します。バイト配列とエンコーディングを入力として受け取り、対応する文字列を返します。
using System;
using System.Text;
public class ByteArrayToString
{
public static void Main(string[] args)
{
// UTF-8でエンコードされたサンプルバイト配列("Hello, World!"を表す)
byte[] byteArray = Encoding.UTF8.GetBytes("Hello, World!");
// UTF-8エンコーディングを使用してバイト配列を文字列に変換
string str = Encoding.UTF8.GetString(byteArray);
// 結果の文字列を出力
Console.WriteLine(str); // 出力: Hello, World!
}
}
この例ではUTF-8エンコーディングを使用しています。バイト配列が異なるエンコーディングを使用している場合は、Encoding.UTF8
を適切なエンコーディング(例:Encoding.ASCII
、Encoding.Unicode
)に置き換えてください。
MemoryStream
を使用したバイト配列の文字列への変換
MemoryStream
アプローチは、特に大きなバイト配列を処理する場合や、ストリームの動作をより細かく制御する必要がある場合に、柔軟性を提供します。バイト配列からMemoryStream
を作成し、StreamReader
を使用してデータを文字列として読み取ります。
using System;
using System.IO;
using System.Text;
public class ByteArrayToStringMemoryStream
{
public static void Main(string[] args)
{
// UTF-8でエンコードされたサンプルバイト配列("Hello, World!"を表す)
byte[] byteArray = Encoding.UTF8.GetBytes("Hello, World!");
// バイト配列からMemoryStreamを作成
using (MemoryStream stream = new MemoryStream(byteArray))
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
// ストリームから文字列を読み取る
string str = reader.ReadToEnd();
// 結果の文字列を出力
Console.WriteLine(str); // 出力: Hello, World!
}
}
}
}
using
ステートメントにより、適切なリソース管理が確保されます。この方法はより多くの制御を提供しますが、小さなバイト配列の場合、Encoding.GetString()
よりも一般的に効率が低くなります。
最適な方法の選択
小さなバイト配列を扱うほとんどのシナリオでは、Encoding.GetString()
はよりシンプルで効率的な選択肢です。ただし、大きな配列、複雑なストリーム操作、またはストリームのより細かい制御が必要な場合は、MemoryStream
がより堅牢なソリューションを提供します。正確な変換を保証するために、常に正しいエンコーディングを選択することを優先してください。