[英]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.