C#で16進数文字列をバイト配列に変換する方法

16進数文字列をバイト配列に変換したい。

「010203」とか「01 02 03」とか16進数の文字列をバイト配列に変換する必要があったのでその方法を調べてみた。

その方法は2種類あったが、次に使おうと思ったときに忘れていそうなので備忘録もかねて記録しておく。

Int32を使用する方法

[csharp]
// 16進数文字列
String[] hexStrings = new String[] { "01", "02", "03", "04" };

// バイト配列
byte[] bytes = new byte[hexStrings.Length];

// 16進数文字列をバイト配列へ変換
for (int i = 0; i < hexStrings.Length; i++ )
{
bytes[i] = (byte)Convert.ToInt32(hexStrings[i], 16);
}
[/csharp]

Convertを使用する方法

[csharp]
// 16進数文字列
String[] hexStrings = new String[] { "01", "02", "03", "04" };

// バイト配列
byte[] bytes = new byte[hexStrings.Length];

// 16進数文字列をバイト配列へ変換
for (int i = 0; i < hexStrings.Length; i++ )
{
bytes[i] = (byte)Convert.ToInt32(hexStrings[i], 16);
}
[/csharp]

hexStringsは「010203」だったらsubstringとか「01 02 03」だったら半角スペースでsplitとかで作ることを想定しています。

どちらも1度intに変換してからbyteにキャストするという点では一緒だ。