2009年1月8日木曜日

[.NET]文字列の16進数変換&復元

特定の文字列をバイト列に変換し、変換したバイト列を16進数の文字列に変換する。みたいな事をしたい場合が時々あります。そういった場合、.NET FrameworkのBitConverterを使うと楽に処理できます。
コードはこんな感じ。

// 文字列からUTF8のバイト列に変換
byte[] data = Encoding.UTF8.GetBytes("1192つくろう鎌倉幕府!!");

//00-11-22形式の文字列に変換
string hexText = BitConverter.ToString(data);
System.Diagnostics.Debug.WriteLine("16進文字列 [" + hexText + "]");

//00-11-22の文字列よりbyte[]に変換
string[] hexChars = hexText.Split('-');
//16進文字列をbyteに変換
byte[] decData = new byte[hexChars.Length];
for (int i=0i <hexChars.Length ;i++)
{
    decData[i] = Convert.ToByte(hexChars[i], 16);
}

// UTF8のバイト列からstringに変換
string decText = Encoding.UTF8.GetString(decData);

System.Diagnostics.Debug.WriteLine("復元結果 [" + decText + "]");


■実行結果
16進文字列 [31-31-39-32-E3-81-A4-E3-81-8F-E3-82-8D-E3-81-86-E9-8E-8C-E5-80-89-E5-B9-95-E5-BA-9C-EF-BC-81-EF-BC-81]
復元結果 [1192つくろう鎌倉幕府!!]


BitConverter.ToString(data).Replace("-", "")とすれば、「-」がなくなるので文字数を少なくすることができます。また、先頭に"0x"をつけてBitConverter.ToString(data).Replace("-", ",0x")とすれば、おなじみの形式になりますね。

0 件のコメント: