[英]Write multiple hex values in C# (BinaryWriter)
我想允许用户将文本框( 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
,它将在偏移量0xF00000
处写入恰好是我在textBox1
( 8A
)中输入的3个字节。
我如何使其从textBox1
写入多个字节,所以在0xF00000
, BinaryWriter
将写入十六进制值3F468A
,而不仅仅是8A
?
明确地说,您的两个文本框都不包含数字数据。 您需要将文本框中的字符串转换为正确的数字数据类型。
正确完成转换后,只需使用正确的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
}
消费者
感谢您的回答,我非常感谢:
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,值太大或太小”。
你知道为什么要这么做吗?
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.