如何从文件中读取十六进制?

时间:2016-06-16 16:53:01

标签: c#

我是C#的新手,我正在尝试创建一个可以读写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();
    }

我希望它显示文件中的所有文本,而不仅仅是第一个文本。

1 个答案:

答案 0 :(得分:0)

试试这个。它将引导您完成整个文件。请注意textEditor.Text上的+=,我认为这就是你想要的。

我假设您正在读取每个字节,然后将其转换为2位十六进制字符,然后附加它。但是,如果我错误解释并且您希望一次读取多个字节,那么我一次只能更容易阅读。

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;
            }
        }
    }
}