簡體   English   中英

在C#(BinaryWriter)中寫入多個十六進制值

[英]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 3F468AtoolStripTextBox1 F00000 ,它將在偏移量0xF00000處寫入恰好是我在textBox18A )中輸入的3個字節。

我如何使其從textBox1寫入多個字節,所以在0xF00000BinaryWriter將寫入十六進制值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM