バイト型配列 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