Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二进制写入地址_C#_C# 4.0 - Fatal编程技术网

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()
    -方法将在之后关闭它,并且关闭并不总是刷新写入程序。这可能是您的写入未刷新到文件的原因
关于代码的另一个有趣的地方是,您正在使用具有特定十六进制值的for循环,只是将相同的值(
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();
        }