TextBox に16進+文字で表示する

前田稔の超初心者のプログラム入門

プログラムの説明

  1. このプログラム自身(CSForm.cs)の文字コードを Unicode(utf-16) で格納して下さい。
    CSForm.cs を入力して TextBox に16進+文字で表示します。
    utf-8 や MultiByte で保存されていると、日本語の表示が文字化けします。
    文字化けの対応は utf-16, utf-8, Shift_JIS に対応 で説明します。
  2. class MyForm に次の領域を定義して下さい。
    file_name が入力するファイル名(このプログラム自身)です。
    byt が入力バッファで、一度に128文字(256バイト)ずつ入力(表示)します。
    leng は実際の入力長です。
    pos はファイル先頭からのオフセットです。
    public class MyForm : Form
    {
         ・・・
        string  file_name = "../../CSForm.cs";
        byte[]  byt = new byte[256];
        int     leng;
        int     pos = 1000;
    
  3. MyForm() でファイルをオープンして byt[256] にデータを入力します。
    reader.Position がデータの入力位置で、仮に先頭から 1000バイトの位置に設定しています。
        public MyForm()
        {
            InitializeComponent();
            if (!File.Exists(file_name))    //ファイルの有無をチェック
                MessageBox.Show(file_name,"Input File Error");
            FileStream reader = File.Open(file_name,FileMode.Open);
            reader.Position = pos;
            leng= reader.Read(byt,0,256);
            Paint += new PaintEventHandler(MyHandler);
        }
    
  4. MyHandler() で byt[256] のデータを16進数+文字で表示します。
    文字コードと16進数の表示は 16進数+文字で TextBox に表示する を参照して下さい。
        private void MyHandler(object sender, PaintEventArgs e)
        {   string  wstr = "";
            int     i,j,k;
            byte[]  wt = new byte[16];
    
            for(i=0; i<leng; i+=16)
            {   j = leng-i;
                if (j > 16) j = 16;
                for(k=0; k<j; k++)  wt[k]= byt[i+k];
                // オフセット
                k = pos + i;
                wstr += k.ToString("X4");
                wstr += ": ";
                // 16進
                for(k=0; k<j; k++)
                {   wstr+= wt[k].ToString("X2");
                    if (k % 4 == 3) wstr += " ";
                }
                // 文字
                wstr+= "  ";
                for(k=0; k<j/2; k++)
                    wstr+= (char)(wt[k*2] + (wt[k*2+1]<<8));
                wstr+= "  ";
                wstr+= "\r\n";
            }
            textBox1.Text = wstr;
        }
    
  5. 文字の間隔が揃うように TextBox にフォントを定義して下さい。
    this.textBox1.Font = new System.Drawing.Font("MS ゴシック", 12F, System.Drawing.FontStyle.Regular,
                         System.Drawing.GraphicsUnit.Point, ((byte)(128)));
    
  6. ウインドウや TextBox の大きさを表示サイズに合わせて調整して下さい。
  7. このまま表示したのでは、改行コード(CR/LF)が働いて TEXT の途中で改行されてしまいます。
    そこで CR(000D)や LF(000A)を「・」に置き換えて下さい。

[Next Chapter ↓] メニューを処理する
[Previous Chapter ↑] Binary Viewer のレイアウト

超初心者のプログラム入門(C# Frame Work)