トップ  >  サンプルソース  >  ファイル16進表示(C#/VB.NET)

ファイル16進表示(C#/VB.NET)

2010年05月23日

ファイルを読み込みHEX(16進)形式で表示するサンプル(ソース/コード)です。バイナリエディタと同様の表示をする事が出来ます。

ポイントは以下の通りです。
1.ファイルをバイト配列に読み込む
2.バイト配列を16進文字列(16バイト毎に改行)に変換
3.16進文字列を行単位の配列に変換
4.バイナリ16進表示

' -----------------------------------------------------------
' ファイルをバイナリ16進で表示するサンプル(VB.NET/VS2005)
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles Button1.Click

    ' ファイルをバイト配列に読み込み
    Dim bytDt() As Byte = ByteRead("D:\Temp\Test1.txt")

    ' バイト配列を16進文字列(16バイト毎に改行)に変換
    Dim strDt As String = ByteToString(bytDt)

    ' 16進文字列を行単位の配列に変換
    If strDt.Substring(strDt.Length - 1, 1) = vbLf Then
        strDt = strDt.Substring(0, strDt.Length - 1)
    End If
    Dim strAr() As String = strDt.Split(vbLf)

    ' バイナリ16進表示
    System.Diagnostics.Debug.Print("--")
    For i As Integer = 0 To strAr.Length - 1
        Debug.Print(strAr(i))
    Next i
    System.Diagnostics.Debug.Print("--")
End Sub

' ファイルをバイト配列で読み込み
Private Function ByteRead(ByVal fPath As String) As Byte()
    Dim dt As Byte() = New Byte() {}
    Dim sr As System.IO.Stream = Nothing
    Dim br As System.IO.BinaryReader = Nothing
    sr = System.IO.File.Open(fPath, _
        System.IO.FileMode.Open, _
        System.IO.FileAccess.Read)
    br = New System.IO.BinaryReader(sr)
    dt = New Byte(sr.Length - 1) {}
    br.Read(dt, 0, dt.Length)
    br.Close()
    sr.Close()
    Return dt
End Function

' バイト配列を16進文字列(16バイト毎に改行)に変換
Public Function ByteToString(ByRef bytDt() As Byte) As String
    Const LBYT = 16
    Dim sb As New System.Text.StringBuilder("")
    For i As Integer = 0 To bytDt.Length - 1
        Dim ival As Integer : ival = bytDt(i)
        Dim sval As String
        If ival < 16 Then
            sval = "0" & Convert.ToString(ival, 16)
        Else
            sval = Convert.ToString(ival, 16)
        End If
        sb.Append(sval)

        If ((i + 1) Mod LBYT) = 0 Then
            sb.Append(vbLf)
        End If
    Next i
    Return sb.ToString()
End Function
' -----------------------------------------------------------

// ----------------------------------------------------------
// ファイルをバイナリ16進で表示するサンプル(C#.NET/VS2005)
private void button1_Click(object sender, EventArgs e)
{
    // ファイルをバイト配列に読み込み
    Byte[] bytDt = ByteRead(@"D:\Temp\Test1.txt");

    // バイト配列を16進文字列(16バイト毎に改行)に変換
    String strDt = ByteToString(bytDt);

    // 16進文字列を行単位の配列に変換
    if( strDt.Substring(strDt.Length - 1, 1) == "\n" ){
        strDt = strDt.Substring(0, strDt.Length - 1);
    }
    String[] strAr = strDt.Split('\n');

    // バイナリ16進表示
    System.Diagnostics.Debug.Print("--");
    for (int i = 0; i <= strAr.Length - 1; i++)
    {
        System.Diagnostics.Debug.Print(strAr[i]);
    }
    System.Diagnostics.Debug.Print("--");
}

// ファイルをバイト配列で読み込み
private Byte[] ByteRead(String fPath)
{
    Byte[] dt = new Byte[] { };
    System.IO.Stream sr = null;
    System.IO.BinaryReader br = null;
    sr = System.IO.File.Open(fPath,
        System.IO.FileMode.Open,
        System.IO.FileAccess.Read);
    br = new System.IO.BinaryReader(sr);
    dt = new Byte[sr.Length];
    br.Read(dt, 0, dt.Length);
    br.Close();
    sr.Close();
    return dt;
}

// バイト配列を16進文字列(16バイト毎に改行)に変換
public String ByteToString(Byte[] bytDt)
{
    const int LBYT = 16;
    System.Text.StringBuilder sb =
        new System.Text.StringBuilder("");
    for (int i = 0; i <= bytDt.Length - 1; i++)
    {
        int ival = bytDt[i];
        String sval;
        if (ival < 16)
        {
            sval = "0" + Convert.ToString(ival, 16);
        }
        else
        {
            sval = "" + Convert.ToString(ival, 16);
        }
        sb.Append(sval);

        if (((i + 1) % LBYT) == 0)
        {
            sb.Append("\n");
        }
    }
    return sb.ToString();
}
// ----------------------------------------------------------
スポンサーサイト

EXCEL操作(C#.NET) | トップページへ戻る | ファイル差分一覧(ツール)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る