C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果

C#でバイト型配列 byte[]型から string型に変換するコードと実行結果を紹介します。

補足
逆の処理、「string(文字列)からバイト型配列 byte[] (バイナリ) に変換する」についてはこちらの記事を参照してください。

概要

バイト型配列 byte[]から文字列(string)型に変換する場合、多くの場合byte配列にはShift JISの文字コードで文字列データが格納されています。C#(.NET Framework)ではstring型の文字列はunicodeで扱われるため、単純にbyte配列のデータをstring型にコピーしても文字コードが違うため同じ文字列として扱えません。
byte配列からstring型に変換するためには、文字コードの変換も含めて変換処理をする必要があります。
C#では System.Text.Encodingクラスを利用することで、文字コードのエンコードを含めてbyte[]型から文字列型への変換ができます。

書式

byte配列からstring型に変換するには EncodingオブジェクトのGetString()メソッドを利用します。

(Encodingオブジェクト).GetString((byte配列の入力値))

記述例

private void button1_Click(object sender, EventArgs e)
{
  byte[] data;
  data = GetData(); //何らかのbyte[]データを取得

  //ASCII エンコード
  string text = System.Text.Encoding.ASCII.GetString(data);
  
  //データがShift-JISの場合
  //string text = System.Text.Encoding.GetEncoding("shift_jis").GetString(data);

  //データがEUCの場合
  //string text = System.Text.Encoding.GetEncoding("euc-jp").GetString(data);

  //データがunicodeの場合
  //string text = System.Text.Encoding.Unicode.GetString(data);

  //データがutf-8の場合
  //string text = System.Text.Encoding.UTF8.GetString(data);

  //表示
  label1.Text=text;
}

プログラム例

UI

Windows Formアプリケーションを作成し、下図のUIを作成します。TextBox2つ、Buttonを1つフォームに配置します。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像1

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringConvertArray
{
  public partial class FormArrayToString : Form
  {
    public FormArrayToString()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string input = textBox1.Text;
      string[] bytestr = input.Split(',');
      byte[] data = new byte[bytestr.Length];

      for (int i = 0; i < bytestr.Length; i++) {
        data[i] = Convert.ToByte(bytestr[i],16);
      }

      string text = Encoding.GetEncoding("shift_jis").GetString(data);
      textBox2.Text = text;
    }
  }
}

解説

下記のコードにより、textbox1 に入力された文字列をinput変数に格納し、"," で区切り文字列の配列にします。あわせて、data配列を宣言し、配列長をカンマで区切られた文字列配列と同じ長さにします。

  string input = textBox1.Text;
  string[] bytestr = input.Split(',');
  byte[] data = new byte[bytestr.Length];

A3,B2,C1

が入力された場合

bytestr[0] = "A3"
bytestr[1] = "B2"
bytestr[2] = "C1"

となります。

続いて、forループにより、bytestr配列のそれぞれの要素の文字列を数値(byte型)に変換します。変換した値をdata配列に代入します。

  for (int i = 0; i < bytestr.Length; i++) {
    data[i] = Convert.ToByte(bytestr[i],16);
  }

data[0] = 0xA3 //10進数で 163
data[1] = 0xB2 //10進数で 178
data[2] = 0xC1 //10進数で 193

となります。ここまでで入力用データのbyte型配列が準備できました。

GetEncoding()メソッドを呼び出し、エンコーディングオブジェクトを取得します。今回は"shift_jis"を与えることでSJISのエンコーディングオブジェクトを取得しています。取得したエンコーディングオブジェクトのGetString()メソッドを呼び出し、文字列に変換します。GetString()メソッドの第一引数に変換元のバイト配列を与えます。変換結果はメソッドの戻り値として返ります。

  string text = Encoding.GetEncoding("shift_jis").GetString(data);

下記コードでも動作は同じです。
  Encoding sjenc = Encoding.GetEncoding("shift_jis");
  string text = sjenc.GetString(data);

GetString()メソッドでバイト配列から文字列に変換した文字列を下部のテキストボックスに表示します。
  textBox2.Text = text;

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像2

上部のテキストボックスに、"44,75,63,6B,82,CD,83,41,83,71,83,8B" を入力します。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像3

[button1]をクリックします。上部のテキストボックスに入力したカンマ区切りの値の文字コードの文字「Duckはアヒル」が下部のテキストボックスに表示されます。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像4

入力する値を変更します。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像5

上部のテキストボックスに、"43,23,20,50,72,6F,67,72,61,6D,6D,69,6E,67" を入力します。
C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像6

[button1]をクリックします。上部のテキストボックスに入力したカンマ区切りの値の文字コードの文字「C# Programming」が下部のテキストボックスに表示されます。

C#でバイト型配列 byte[] (バイナリ) からstring(文字列)に変換するコードと実行結果:画像7

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2010-05-16
Copyright © 1995–2025 iPentec all rights reserverd.