在C#中写入多个十六进制值(BinaryWriter)

时间:2014-09-10 10:32:11

标签: c# visual-studio

我想允许用户将文本框(textBox1)中的多个字节写入十六进制偏移量(toolStripTextBox1)。

代码是:

using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(ofd.FileName)))
{
     bw.Seek(toolStripTextBox1.Text, SeekOrigin.Begin);
     bw.Write((byte)textBox1.Text);
}    

不幸的是,它只写了一个字节,所以让我说我放入textBox1 3F468AtoolStripTextBox1 F00000,它会写入偏移量{ {1}}我放入0xF00000textBox1)的3个字节中的最后一个字节。

如何从8A写入多个字节,因此在textBox10xF00000将写入十六进制值BinaryWriter,而不只是{{1} }}?

2 个答案:

答案 0 :(得分:2)

要清楚,您的文本框都不包含数字数据。您需要将文本框中的字符串转换为正确的数字数据类型。

正确完成转换后,只需使用正确的Write重载:

var seekPos = int.Parse(toolStripTextBox1.Text, NumberStyles.HexNumber);
var data = UInt32.Parse(textBox1.Text, NumberStyles.HexNumber);
using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(ofd.FileName)))
{
     bw.Seek(seekPos, SeekOrigin.Begin);
     bw.Write(data); //data is UInt32, correct overload is chosen
}   

答案 1 :(得分:0)

花钱,

感谢您的回答,我真的很感激:

 var seekPos = int.Parse(toolStripTextBox1.Text,
 NumberStyles.HexNumber); var data = UInt32.Parse(textBox1.Text,
 NumberStyles.HexNumber); using (BinaryWriter bw = new
 BinaryWriter(File.OpenWrite(ofd.FileName))) {
      bw.Seek(seekPos, SeekOrigin.Begin);
      bw.Write(data); //data is UInt32, correct overload is chosen }

我已经尝试过代码,它的工作原理非常好,但它以反向十六进制(半字)写入,所以如果我输入textBox1 424344,它会在十六进制数据44434200中写入。

另外,当我键入单个字节时,让我们说FE,它写入FE000000。如果我键入FAFBFCFDFE,它会给我一个错误 - "对于UInt32和#34,值太大或太小。

你知道为什么这样做吗?

由于