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

バイナリファイルへの書き込みや通信などの用途で、文字列からバイト型配列 byte[]に変換したいことがあります。この記事では文字列からバイト型配列(byte[])への変換コードを紹介します。

概要

C#では文字列はunicodeとして定義されているため、文字列をbyte[]配列にコピーするためには、エンコードの指定(SJIS, JIS, EUC, UTF-8など)も必要になります。C#では System.Text.Encodingクラスが用意されており、このクラスを用いて文字列をエンコードを指定して、byte[]配列型に変換できます。
文字列(string)型からbyte[]配列型に変換する場合はGetBytes()メソッドを用います。
補足
逆の処理である「バイト型配列 byte[] (バイナリ) からstring(文字列)型に変換する」コードはこちらの記事を参照してください。

コード例

private void button1_Click(object sender, EventArgs e)
{
  string text = "文字列";

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

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

  //データがunicodeの場合
  //byte[] data = System.Text.Encoding.Unicode.GetBytes(text);

  //データがutf-8の場合
  //byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

  //何かしらの処理
  WirteBinaryData(data);
}
エンコード名について
GetEncoding()メソッドの引数に与える文字コード名の一覧はこちらを参照してください。

プログラム例

UI

下図のUIを作成します。TextBoxとButtonを配置します。

コード

下記のコードを記述します。
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;
using System.Text;

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

    private void button1_Click(object sender, EventArgs e)
    {
      string str = "しろくまABC";
      byte[] data = Encoding.GetEncoding("shift_jis").GetBytes(str);

      for (int i = 0; i < data.Length; i++) {
        textBox1.Text += Convert.ToString(data[i],16) + " - ";
      }
    }
  }
}

解説

ボタンをクリックすると"しろくまABC"という文字列をShift-JISでエンコードしてバイト配列に変換します。 変換後、バイト配列の内容を16進数表記でテキストボックスに表示します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。"しろくまABC"の文字列をShift-JISで記述した各バイトの値がテキストボックスに表示されます。


文字とバイトの数値との対応は下記のとおりです。
  • し ⇒ 82 b5
  • ろ ⇒ 82 eb
  • く ⇒ 82 ad
  • ま ⇒ 82 dc
  • A ⇒ 41
  • B ⇒ 42
  • C ⇒ 43

補足 : エンコードを変更した場合

上記のプログラムではエンコードをShift-JISにしましたが、エンコードの指定を変更すると結果も変わります。
以下はエンコードをUTF-8にした場合のコードとその結果です。
private void button1_Click(object sender, EventArgs e)
{
  string str = "しろくまABC";
  byte[] data = Encoding.UTF8.GetBytes(str);

  for (int i = 0; i < data.Length; i++) {
    textBox1.Text += Convert.ToString(data[i],16) + " - ";
  }
}


補足 : Webのアクセスなどネットワーク通信での利用例

ネットワーク通信での利用の際は、先にASCII文字のみにエンコードされることもあるため、
  byte[] data = Encoding.ASCII.GetBytes(str);
が使われます。(全角文字が含まれない場合も上記です。)

または、JISエンコード(iso-2022-jp)が使われるケースもあります。
  byte[] data = Encoding.GetEncoding("iso-2022-jp").GetBytes(str);
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-05-16
iPentec all rights reserverd.