byte 配列を文字列に変換する
元ネタは中さんの blog 記事。
元々は「指定ディレクトリ以下のファイルのハッシュ (MD5) を取る」サンプルコードですが、余計なところに目が行きました。。。
まずはオリジナルをコピペ。
class Program { static void Main(string[] args) { var pathname = args[0]; var files = Directory.GetFiles(pathname, "*.*", SearchOption.AllDirectories); var md5 = MD5.Create(); foreach (var file in files) { var bytes = File.ReadAllBytes(file); var x = md5.ComputeHash(bytes); Console.WriteLine(string.Format("{0}\t{1}", file, ByteToByteString(x))); } } static string ByteToByteString(byte[] data) { var sb = new StringBuilder(); foreach (var byt in data) { var bytstr = "00" + byt.ToString("X"); sb.Append(bytstr.Substring(bytstr.Length - 2)); } return sb.ToString(); } }
もう少し byte[] → string の変換を簡略化できないのかなぁと思って色々書き換えて遊んでいたら、最終的にワンライナーに落とせたので、記念に書き残しておきます。 :p
static string ByteToByteString(byte[] data) { return String.Concat(Array.ConvertAll(data, new Converter<byte, string>(b => b.ToString("X2")))); }
元のコードと比べて判りやすいかと言われると……どうだろう。 ^^;;
# 現実逃避で遊んだネタです。。。