我想允许用户将文本框(textBox1
)中的多个字节写入十六进制偏移量(toolStripTextBox1
)。
代码是:
using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(ofd.FileName)))
{
bw.Seek(toolStripTextBox1.Text, SeekOrigin.Begin);
bw.Write((byte)textBox1.Text);
}
不幸的是,它只写了一个字节,所以让我说我放入textBox1
3F468A
和toolStripTextBox1
F00000
,它会写入偏移量{ {1}}我放入0xF00000
(textBox1
)的3个字节中的最后一个字节。
如何从8A
写入多个字节,因此在textBox1
,0xF00000
将写入十六进制值BinaryWriter
,而不只是{{1} }}?
答案 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,值太大或太小。
你知道为什么这样做吗?
由于