< 環状キュークラス | (編集中) >

March 24, 2009

ヘキサダンプクラス

public class Dump
{
    private byte[] _source;

    #region コンストラクタ

    public Dump (string source)
    {
        _source = Encoding.Default.GetBytes (source);
    }
    public Dump (byte [] source)
    {
        _source = source;
    }
    public Dump (double source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (float source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (ulong source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (uint source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (ushort source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (long source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (int source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (short source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (char source)
    {
        _source = BitConverter.GetBytes (source);
    }
    public Dump (bool source)
    {
        _source = BitConverter.GetBytes (source);
    }
    #endregion


    public void Write ()
    {
        Console.WriteLine ("     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF");
        StringBuilder builder = new StringBuilder ();
        for (int i = 0; i < _source.Length; i++)
        {
            if ((i % 16) == 0)
            {
                if (i != 0)
                {
                    Console.Write (builder.ToString ());
                    var ascii = _source.Skip (i - 16).Take (16).Select (b => b < (byte) 0x20 ? (byte) 0x2e : b).ToArray ();
                    Console.WriteLine (Encoding.Default.GetString (ascii));
                }
                builder = new StringBuilder ();
                builder.AppendFormat ("{0:X4} ", i);
            }
            builder.AppendFormat ("{0:X2} ", _source [i]);
        }
        var remain = _source.Length % 16;
        if (remain != 0)
        {
            Console.Write ("{0,-53}", builder.ToString ());
            var ascii = _source.Skip (_source.Length - remain).Take (remain).Select (b => b < (byte) 0x20 ? (byte) 0x2e : b).ToArray ();
            Console.WriteLine (Encoding.Default.GetString (ascii));
        }
    }
}

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2352

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?