2016-06-16 3 views
0

Я очень новичок в C#, и я пытаюсь создать приложение, которое может читать и писать Hex в файл. Я наблюдал за некоторыми замечательными учебниками, но конечный продукт печатает только небольшое количество шестнадцатеричного кода в текстовом поле. Это мой кодКак читать Hex из файла?

private void button3_Click(object sender, EventArgs e) 
    { 

     if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      textBox1.Text = openFileDialog1.FileName; 
      textEditor.Text = File.ReadAllText(textBox1.Text); 
     } 
     BinaryReader br = new BinaryReader(File.OpenRead(textBox1.Text)); 
     byte[] buffer = br.ReadBytes(4); 
     Array.Reverse(buffer); 
     textEditor.Text = BitConverter.ToInt32(buffer, 0).ToString("X"); 
     br.Dispose(); 
    } 

Я хочу, чтобы он отображал весь текст в файле, а не только первый.

+0

Процесс 1 байт в то время, превращая его в строковое представление в шестнадцатеричном формате, вызовите '.ToString («X2»)' на каждый байт, чтобы получить его шестнадцатеричное представление. –

+2

Вы читаете только первые четыре байта. Вы хотите, чтобы цикл продолжал читать до конца файла. – bkribbs

ответ

0

Попробуйте это. Он проведет вас через весь файл. Обратите внимание на += на textEditor.Text, я полагаю, это то, что вы хотите.

Я предполагаю, что вы читаете каждый байт и преобразовываете его в двухзначный шестнадцатеричный символ, а затем добавляете его. Однако, если я неправильно интерпретирую, и вы хотите читать сразу в нескольких байтах, я упростил чтение заново.

private void button3_Click(object sender, EventArgs e) 
{ 
    if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    { 
     textEditor.Text = ""; 
     using (BinaryReader br = new BinaryReader(File.Open(openFileDialog1.FileName, FileMode.Open))) 
     { 
      int pos = 0; 
      int length = (int)br.BaseStream.Length; 
      int numBytesToRead = 1; 
      int numHexCharsPerLine = 5; 
      int numCharsRead = 0; 
      while (pos < length) 
      { 
       byte[] buffer = br.ReadBytes(numBytesToRead); 
       for (int i = 0; i < buffer.Length; i++) 
       { 
        textEditor.Text += buffer[i].ToString("X2"); 
        textEditor.Text += " "; // Will put a space between each hex character 
        if (numCharsRead % numHexCharsPerLine == 0 && numCharsRead > 0) 
        { 
         textEditor.Text += "\r\n"; 
        } 
        numCharsRead++; 
       } 
       pos += numBytesToRead; 
      } 
     } 
    } 
} 
+0

Спасибо. Я попробовал ввести все это, но я получаю некоторые ошибки. Я не думаю, что Im поставил его в нужное место. –

+0

Повторите попытку с этого, так как я его модифицировал, но потом скажите мне, что ваши ошибки. – bkribbs

+0

Извините! Исправлено, попробуйте еще раз :) – bkribbs

Смежные вопросы