HEX文字列をバイナリへ変換

教えていただいたのでメモ

インテルHEXファイルは文字列で16進表記されています。
例)
:1001000043004865617020616E6420737461636BA5

これを
0x10,0x01,0x00...
とバイナリに変換したいのをFBへ投稿したら@furuya02さんがおしえてくださいました。

ushort n16 = Convert.ToUInt16("0xabcd", 16);
byte[] bytes = BitConverter.GetBytes(i);

無事bytesに0xab,0xcdが入るようになりました。

それを聞いてから

byte n8 = Convert.ToByte("0xab", 16);

でも行けるかなと思って作ってみました。

これを利用して、

string s = "1001000043004865617020616E6420737461636BA5";

を変換するには、

int i,j;
string s = "1001000043004865617020616E6420737461636BA5";
len = s.Length / 2;
byte[] num16 = new byte[len];

j = 0;
for ( i = 0; i < len; i++ )
{
  num16[i] = Convert.ToByte(s.Substring(j, 2), 16);
  j += 2;
}

一気に変換する方法があるのかもしれませんが、ちょっと見つけられなかったので
作ってみました。

普段はC言語使いなので、こつが分かるとC#も楽ですね。