Hex редактор *.bin файлов - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день ! Нужно сделать свой редактор bin файлов . Подскажите: Как правильно загрузить файл через openFileDialog. Считать в массив байт . И вывести в формате : номер строки , 16 байт через пробел в хекс виде , 16 байт через пробел в ASCII. Заранее спасибо всем откликнувшимся
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. OpenFileDialog openFileDialog = new OpenFileDialog();
  4. openFileDialog.Filter = "bin files (*.bin)|*.bin|All files (*.*)|*.*";
  5. if (openFileDialog.ShowDialog() == DialogResult.OK)
  6. {
  7. FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);
  8. long nBytesRead = fs.Length;
  9. //
  10. }
как теперь массив разделить по 16 байт и вывести ?
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. namespace Hex
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }
  18. private void button1_Click(object sender, EventArgs e)
  19. {
  20. OpenFileDialog openFileDialog = new OpenFileDialog();
  21. openFileDialog.Filter = "bin files (*.bin)|*.bin|All files (*.*)|*.*";
  22. if (openFileDialog.ShowDialog() == DialogResult.OK)
  23. {
  24. FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);
  25. long nBytesRead = fs.Length;
  26. byte[] bytes = new byte[fs.Length];
  27. fs.Read(bytes, 0, bytes.Length);
  28. fs.Close();
  29. string hex = BitConverter.ToString(bytes);
  30. hex = hex.Replace("-", " ");
  31. richTextBox1.Text = hex;
  32. }
  33. }
  34. }
  35. }

Решение задачи: «Hex редактор *.bin файлов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10.  
  11. namespace Hex
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.            
  19.         }
  20.  
  21.         private void Open_Click(object sender, EventArgs e)
  22.         {
  23.             OpenFileDialog openFileDialog = new OpenFileDialog();
  24.             openFileDialog.Filter = "bin files (*.bin)|*.bin|All files (*.*)|*.*";
  25.  
  26.             if (openFileDialog.ShowDialog() == DialogResult.OK)
  27.             {
  28.             System.IO.FileInfo file = new System.IO.FileInfo(openFileDialog.FileName);
  29.             long size = file.Length;
  30.             byte[] shc = new byte[size];
  31.             using (FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open))
  32.             {
  33.                 fs.Read(shc, 0, Convert.ToInt32(size));
  34.             }
  35.             dataGridView1.Rows.Clear();
  36.             long kolStrok = size / 16;
  37.             for (long i = 0; i < kolStrok; i++)
  38.             {
  39.                 string id = (i * 16).ToString("X") + ":";
  40.                 id = id.PadLeft(7, '0');
  41.                 dataGridView1.Rows.Add(id);
  42.             }
  43.             long c = 0;
  44.             for (int i = 0; i < kolStrok; i++)
  45.             {
  46.                 for (byte b = 1; b < 17; b++)
  47.                 {
  48.                     dataGridView1[b, i].Value = string.Format("{0:X2}", shc[c]); // Заполнение HEX поля
  49.                     c++;
  50.                 }
  51.             }
  52.             c = 0;
  53.             for (int i = 0; i < kolStrok; i++)
  54.             {
  55.                 for (byte b = 18; b < 34; b++)
  56.                 {
  57.                     dataGridView1[b, i].Value = Convert.ToChar(shc[c]); // Заполнение ASCII поля
  58.                     c++;
  59.                 }
  60.             }
  61.         }
  62.            
  63.         }
  64.  
  65.         private void Form1_Load(object sender, EventArgs e)
  66.         {
  67.             int s = 20; // Ширина столбцов с 1 по 16
  68.             int s2 = 12; // Ширина столбцов с 18 по 34
  69.             dataGridView1.Columns[0].Width = 50;
  70.  
  71.             for (int i = 1; i < 17; i++)
  72.             {
  73.                 dataGridView1.Columns[i].Width = s; // Присвоение ширины
  74.                 dataGridView1.Columns[i + 17].Width = s2; // Присвоение ширины
  75.                 ((DataGridViewTextBoxColumn)dataGridView1.Columns[i]).MaxInputLength = 2; // Ограничение на ввод 2 знаками
  76.                 ((DataGridViewTextBoxColumn)dataGridView1.Columns[i + 17]).MaxInputLength = 1; //Ограничение на ввод 1 знаком
  77.             }
  78.  
  79.             dataGridView1.Columns[17].Width = 10;
  80.  
  81.             dataGridView1.AllowUserToAddRows = false;
  82.             dataGridView1.AllowUserToDeleteRows = false;
  83.             dataGridView1.AllowUserToResizeColumns = false;
  84.             dataGridView1.AllowUserToResizeRows = false;
  85.  
  86.         }
  87.  
  88.         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  89.         {
  90.  
  91.         }
  92.  
  93.         private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  94.         {
  95.           //  dataGridView1[b, i].Value = string.Format("{0:X2}", shc[c]);
  96.         }
  97.     }
  98.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут