Programming Course in C# ¡Free!

Dump

 Saturday, April 06, 2013 published by Exercises C#
Proposed exercise

Create a "dump" utility: an hex viewer, to display the contents of a file, 16 bytes in each row, 24 files in each screen (and then it must pause before displaying the next 24 rows).

In each row, the 16 bytes must be displayed first in Hex and then as characters (the bytes under 32 must be displayed as a dot, instead of the corresponding non printable character).

Look for "hex editor" in Google Images, if you want to see and example of the expected appearance.

Output



Solution


using System;
using System.IO;

public class Dump
{ 
public static void Main()
{
FileStream file;
const int SIZE_BUFFER = 16;

string name = Console.ReadLine();

try
{
file = File.OpenRead(name);
byte[] data = new byte[SIZE_BUFFER];

int amount;
int c = 0;

string line;
do
{
Console.Write(ToHex(file.Position,8));
Console.Write("  ");


amount = file.Read(data, 0, SIZE_BUFFER);

for (int i = 0; i < amount; i++)
{
Console.Write(ToHex(data[i],2) + " ");

if (data[i] < 32)
line += ".";
else
line += Convert.ToChar(data[i]);
}


if (amount < SIZE_BUFFER)
{
for (int i = amount; i < SIZE_BUFFER; i++)
{
Console.Write("   ");
}
}

Console.WriteLine(line);
line = "";

c++;
if (c == 24)
{
Console.ReadLine();
c = 0;
}
}
while (amount == SIZE_BUFFER);

file.Close();
}
catch(Exception)
{
Console.WriteLine("Error");
}
}

public static string ToHex(int n, int digits)
{
string hex = Convert.ToString( n , 16 );
while (hex.Length < digits)
hex = "0" + hex;
return hex;
}
}