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

概要

C#では文字列はunicodeとして定義されているため、文字列をbyte[]配列にコピーするためには、エンコードの指定も必要になります。C#では System.Text.Encodingクラスが用意されておりこのクラスを用いて文字列をエンコードを指定して、byte[]型に変換できます。
文字列型からbyte[]型に変換する場合はGetBytes()メソッドを用います。

コード例

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()メソッドの引数に与える文字コード名の一覧はこちらを参照してください。

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

サンプルプログラム

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にしましたが、エンコードの指定を変更すると結果も変わります。
以下はエンコードをUTF8にした場合のコードとその結果です。
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) + " - ";
  }
}


補足 : 通信等での利用

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

または、JISエンコード(iso-2022-jp)が使われるケースも多いです。
  byte[] data = Encoding.GetEncoding("iso-2022-jp").GetBytes(str);
登録日 :2010-05-16    最終更新日 :2014-03-05
このページのタグ:[C#] [byte] [変換]
JapaneseEnglish
プライバシー    iPentecについて
iPentec all rights reserverd.