バイト型配列 byte[]型を 16進数表現された文字列に変換する - C#

バイト型配列 byte[]型を 16進数表現された文字列に変換するコードを紹介します。

概要

プログラム例1: string.Format() メソッドを利用する場合

UI

Windows Formアプリを作成し、下図のUIを作成します。フォームにButtonとTextBoxを配置します。

コード

下記のコードを記述します。button1のクリックイベントを実装します。
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 HexStringAndByteArray
{
  public partial class FormByteArrayToHexString : Form
  {
    public FormByteArrayToHexString()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      byte[] data;
      data = new byte[8];
      data[0] = 0x4D;
      data[1] = 0xA8;
      data[2] = 0xF0;
      data[3] = 0x2C;
      data[4] = 0x14;
      data[5] = 0x62;
      data[6] = 0x8A;
      data[7] = 0xC3;

      string str = "";
      for (int i = 0; i < data.Length; i++) {
        str += string.Format("{0:X2}", data[i]);
      }

      textBox1.Text = str;
    }
  }
}

解説

下記コードにより、byte配列に値を代入します。
  byte[] data;
  data = new byte[8];
  data[0] = 0x4D;
  data[1] = 0xA8;
  data[2] = 0xF0;
  data[3] = 0x2C;
  data[4] = 0x14;
  data[5] = 0x62;
  data[6] = 0x8A;
  data[7] = 0xC3;

string.Format() メソッドを利用してbyteの値を16進の文字列に変換します。16進の2桁の文字列に変換するため、Formatメソッドの書式には"X2"を与え2桁の16進文字列で表現する設定とします。(16進文字列のアルファベットを小文字で表現したい場合は "x2" を与えます。)
Formatメソッドで2桁の指定をしているため、1バイトずつ文字列に変換し結果の文字列に足し込みます。
  string str = "";
  for (int i = 0; i < data.Length; i++) {
    str += string.Format("{0:X2}", data[i]);
  }

  textBox1.Text = str;

実行結果

プログラムを実行します。下図のウィンドウが表示されます。


[Exec]ボタンをクリックします。byte配列に代入した数値の値がテキストボックスに16進数文字列表示で表示されます。

プログラム例2: BitConverterを利用する場合

先のコードでbyte配列を16進数表記の文字列に変換できましたが、BitConverterクラスを利用しても同様の処理が実現できます。

UI

Windows Formアプリを作成し、下図のUIを作成します。フォームにButtonとTextBoxを配置します。(button1は利用しません)

コード

下記のコードを記述します。button2のクリックイベントを実装します。
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 HexStringAndByteArray
{
  public partial class FormByteArrayToHexString : Form
  {
    public FormByteArrayToHexString()
    {
      InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
      byte[] data;
      data = new byte[8];
      data[0] = 0x4D;
      data[1] = 0xA8;
      data[2] = 0xF0;
      data[3] = 0x2C;
      data[4] = 0x14;
      data[5] = 0x62;
      data[6] = 0x8A;
      data[7] = 0xC3;

      string str = BitConverter.ToString(data);
      textBox1.Text = str;
    }
  }
}

解説

BitConverterクラスのToString メソッドを呼び出してbyte配列を16進数表記の文字列に変換します。BitConverterのToString()メソッドでは引数にbyte配列を与えることができるため、1文字ごとに処理の必要はありません。変換結果はBitConverter.ToString()メソッドの戻り値として返ります。
  string str = BitConverter.ToString(data);
  textBox1.Text = str;

実行結果

プログラムを実行します。下図のウィンドウが表示されます。


[Exec2]ボタンをクリックします。テキストボックスにbyte配列を16進数文字列表記に変換した文字列が表示されます。1バイトの値ごとに"-"で区切られていることも確認できます。

補足

1バイトごとに"-"で区切られた表記ではなく、つなげて表示ししたい場合は変換結果から"-"記号を削除します。button2のClick イベントのハンドラーを下記のコードに変更します。
    private void button2_Click(object sender, EventArgs e)
    {
      byte[] data;
      data = new byte[8];
      data[0] = 0x4D;
      data[1] = 0xA8;
      data[2] = 0xF0;
      data[3] = 0x2C;
      data[4] = 0x14;
      data[5] = 0x62;
      data[6] = 0x8A;
      data[7] = 0xC3;

      string str = BitConverter.ToString(data).Replace("-", string.Empty);
      textBox1.Text = str;
    }

または、下記のコードでも同様の結果となります。
    private void button2_Click(object sender, EventArgs e)
    {
      byte[] data;
      data = new byte[8];
      data[0] = 0x4D;
      data[1] = 0xA8;
      data[2] = 0xF0;
      data[3] = 0x2C;
      data[4] = 0x14;
      data[5] = 0x62;
      data[6] = 0x8A;
      data[7] = 0xC3;

      string str = BitConverter.ToString(data).Replace('-', '');
      textBox1.Text = str;
    }

下記のコードにより、BitConverterでbyte配列から16新表記文字列に変換した結果の文字列に対して、Replaceメソッドを実行します。Replaceメソッドは第一引数の文字列を第二引数の文字列に置換します。下記のコードでは、"-" 記号を空欄(文字梨)に置換します。実質的には"-"文字の削除となります。
  string str = BitConverter.ToString(data).Replace("-", string.Empty);

プログラムを実行しExec2 ボタンをクリックすると、byte配列に設定された値が16進数表記の文字列で表示されます。バイトごとの"-"区切り文字が表示されないことも確認できます。

参考

逆の変換になる、16進数表現された文字列をバイト型配列 byte[]型に変換するコードはこちらの記事を参照してください。
また、16進数表現された文字列ではなく、キャラクターコードの値の文字列に変換する場合はこちらの記事を参照してください。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2017-11-16
作成日: 2017-11-07
iPentec all rights reserverd.