C# 二进制写入地址
有人能帮我从文本框中把十六进制字符串写到文件十六进制地址吗 这是我当前的代码:C# 二进制写入地址,c#,c#-4.0,C#,C# 4.0,有人能帮我从文本框中把十六进制字符串写到文件十六进制地址吗 这是我当前的代码: private void button1_Click(object sender, EventArgs e) { BinaryWriter wr = new BinaryWriter(File.OpenWrite(listBox1.SelectedItem.ToString())); for (int i = 0x83C410; i <= 0x83C417; i++) {
private void button1_Click(object sender, EventArgs e)
{
BinaryWriter wr = new BinaryWriter(File.OpenWrite(listBox1.SelectedItem.ToString()));
for (int i = 0x83C410; i <= 0x83C417; i++)
{
wr.Write(textBox1.Text);
}
wr.Close();
}
相反,它增加了8个字节,额外增加了9.1个字节,而我的文本框限制为8个字符。
添加的十六进制:08736574706F77765
取而代之:736574706F77765
添加以下内容的ASCII:.setpowre
相反:setpowre因为
列表框。SelectedItem
是一个对象
,ToString()
方法可能不会返回您希望它返回的值。试试这个
string selected = listBox1.GetItemText(listBox1.SelectedValue);
BinaryWriter bw = new BinaryWriter(File.OpenWrite(selected));
首先,在使用文件编写器时有一些提示:
- 尽可能将它们放在using语句中,以便正确地处理它们
- 我总是建议显式调用
,而不是Flush()
。不管怎样,Close()
-方法将在之后关闭它,并且关闭并不总是刷新写入程序。这可能是您的写入未刷新到文件的原因Dispose()
textBox1.Text
)写入文件。为什么呢
更新-我在flushbin看到了您的代码,如果您不介意的话,我选择了这一部分,您在其中注释了一些其他代码:
private void button1_Click(object sender, EventArgs e)
{
#region "New"
//byte[] bytes = new byte[str.Length * sizeof(char)];
//System.Buffer.BlockCopy(textBox1.Text.ToCharArray(), 0, bytes, 0, bytes.Length);
//using (FileStream fs = File.OpenWrite(listBox1.SelectedItem.ToString()))
//{
// fs.Seek(0x83C410, SeekOrigin.Begin);
// fs.Write(bytes, 0, 7);
//}
#endregion
BinaryWriter wr = new BinaryWriter(File.OpenWrite(listBox1.SelectedItem.ToString()));
textBox8.Text = ConvertToHex(Encoding.UTF8.GetBytes(textBox8.Text));
for (int i = 0x83C410; i <= 0x83C417; i++)
{
// wr.Write(textBox1.Text);
}
wr.Close();
}
另一个区别是,您正在逐字节读取,而您正在一次写入整个字符串,因此您不需要在写入方法中使用for循环,或者您应该将代码更改为逐字节写入
private void button1_Click(object sender, EventArgs e)
{
BinaryWriter wr = new BinaryWriter(File.OpenWrite(listBox1.SelectedItem.ToString()));
wr.BaseStream.Position = 0x83C410;
wr.Write(System.Text.Encoding.UTF8.GetBytes(textBox1.Text));
wr.Close();
}
这是我问题的答案。我不明白。是否要将整数转换为十六进制,然后保存?当代码完全无法执行预期操作时,很难猜测其意图。起点是FileStream.Seek()和Encoding.GetBytes()。如果在创建
BinaryWriter
时添加FileMode.Create
作为第二个参数会怎么样?@HansPassant好的,让我试着解释一下。。我已经设法从文件中读取十六进制值,并将其转换为ascii码并显示在文本框中。现在我想编辑文本框中的文本并将其保存回文件?希望你们能这样理解?对不起,我的英语是:/你为什么要在文件中存储十六进制字符串?你知道二进制数据吗?不,我们一点也不明白。因为还不清楚。请尝试通过编辑问题来解释。他正在尝试从文本框而不是列表框中读取和写入值:)他正在从我计算的列表框中选择文件。或者说他的命名技巧很糟糕。现在它会删除错误,无法从“string”转换为“System.IO.Stream”
。我想问题出在:for(int I=0x83C410;我正在从列表框中选择文件,我想在文件中输入的值来自textBox:)@Wim.van.goolth这是因为我忘了file.OpenWrite()
。我已经修好了。我有8个值,我把它们从文件读到textbox1,textbox2。。所以每个值都有其锁定的地址,否则文件将损坏。如果需要,我可以以某种方式显示整个源代码,也许是teamviewer?@user3385780:你不能编辑你的帖子来显示所有必要的代码吗?这将使我们更容易回答您的问题。:)它又长又乱:/i我可以把它放在垃圾箱里吗?你能帮我吗?请?我添加了wr.BaseStream.Position=I代码>但文件仍然没有任何变化
wr.BaseStream.Position = i;
private void button1_Click(object sender, EventArgs e)
{
BinaryWriter wr = new BinaryWriter(File.OpenWrite(listBox1.SelectedItem.ToString()));
wr.BaseStream.Position = 0x83C410;
wr.Write(System.Text.Encoding.UTF8.GetBytes(textBox1.Text));
wr.Close();
}