Objectivo
Cree una utilidad de "volcado": un visor hexadecimal, para mostrar el contenido de un archivo, 16 bytes en cada fila, 24 archivos en cada pantalla (y luego debe detenerse antes de mostrar las siguientes 24 filas).
En cada fila, los 16 bytes deben mostrarse primero en hexadecimal y luego como caracteres (los bytes inferiores a 32 deben mostrarse como un punto, en lugar del carácter no imprimible correspondiente).
Busca "editor hexadecimal" en Google Imágenes, si quieres ver un ejemplo de la apariencia esperada.
Ejemplo Ejercicio C#
Mostrar Código C#
// Importing necessary namespaces
using System;
using System.IO;
class HexDump
{
// Main method where the program execution begins
static void Main()
{
// File path (change this to the file you want to dump)
string filePath = "example.bin";
// Call the DumpFile method to display the content of the file
DumpFile(filePath);
}
// Method to dump the contents of the file in hexadecimal format
static void DumpFile(string filePath)
{
try
{
// Open the file in binary read mode
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// Buffer to store bytes read from the file
byte[] buffer = new byte[16]; // 16 bytes per row
int rowNumber = 0;
int bytesRead;
// Loop to read the file 16 bytes at a time
while ((bytesRead = fs.Read(buffer, 0, 16)) > 0)
{
// Print hexadecimal representation of the bytes
PrintHexRow(buffer, bytesRead, rowNumber);
// Pause after every 24 rows
if (++rowNumber % 24 == 0)
{
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}
}
}
catch (Exception ex)
{
// Catch any errors (like file not found) and display the error message
Console.WriteLine("Error: " + ex.Message);
}
}
// Method to print a single row of hexadecimal and ASCII characters
static void PrintHexRow(byte[] buffer, int bytesRead, int rowNumber)
{
// Print row number in hexadecimal format
Console.Write("{0:X8}: ", rowNumber * 16);
// Print the hexadecimal bytes
for (int i = 0; i < 16; i++)
{
if (i < bytesRead)
Console.Write("{0:X2} ", buffer[i]);
else
Console.Write(" "); // Print empty space for incomplete rows
}
// Print the ASCII representation of the bytes
Console.Write(" | ");
for (int i = 0; i < bytesRead; i++)
{
// If byte is printable, show it, else print '.'
char c = (char)buffer[i];
Console.Write(c >= 32 && c <= 126 ? c : '.');
}
// Move to the next line
Console.WriteLine();
}
}
Salida
00000000: 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 00 00 00 00 | Hello World!.... |
00000010: 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 | ABCDEFGHIJKLMNOP |
00000020: 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 | QRSTUVWXYZ[\]^_` |
00000030: 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 | abcdefghijklmnop |
Press any key to continue...
Código de Ejemplo Copiado!
Comparte este Ejercicio C# Sharp