2014-09-10 73 views
0

我想允許用戶在文本框(textBox1)中將多個字節寫入十六進制偏移量(toolStripTextBox1)。在C#中寫入多個十六進制值(BinaryWriter)

的代碼是:

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

不幸的是,它只是筆者一個字節,所以讓我們說,我把textBox13F468AtoolStripTextBox1F00000,它會寫在3個字節偏移0xF00000只是最後一個字節我輸入textBox18A)。

我如何讓它從textBox1寫多個字節,所以在0xF00000,則BinaryWriter會寫的十六進制值3F468A,而不僅僅是8A

+0

您正在將整個Text屬性轉換爲單個字節'(byte)textBox1.Text',因此它會被截斷。 – 2014-09-10 10:38:09

回答

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 
} 
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來說,價值太大或太小」。

你知道它爲什麼這樣做嗎?

謝謝