WriteByte,如何使用它

时间:2010-07-10 22:29:26

标签: c# .net binary

如何使用WriteByte?以下代码无效,在“stream.WriteByte(totalSeasons)”中出现CS1502错误和CS1502错误;线。这令人沮丧,因为我非常接近完成这个计划。

基本上,我的问题是我需要在点击按钮时将二进制数据写入文件。我可以写这个例子:stream.WriteByte(0xCD);问题是我需要允许用户输入他们想要写入文本框的数据,然后点击一个按钮,数据将从十进制转换为十六进制,然后输入。我想我已经计算出转换部分了,但是我不能用数据编辑二进制文件,因为似乎WriteByte只能写出像0xCD这样的十六进制值,并且似乎没有办法存储十六进制值并仍然可以写入它。我试过stream.WriteByte(ByteName);但是伴随着上述错误。

void BtnTotalSeasonsClick(object sender, EventArgs e)
{
    using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
    { 
        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
        Byte[] totalSeasons = enc.GetBytes(txtTotalSeasons.Text);
        stream.Position = 4; 
        stream.WriteByte(totalSeasons);
    } 
}

3 个答案:

答案 0 :(得分:3)

totalSeasons不止一个字节,因此您调用Write方法来写入整个字节块。

txtTotalSeasons.Text应该变成单个字节吗?也许您正在寻找Byte.TryParse而不是Encoding.GetBytes

编辑:提供整个错误消息,而不仅仅是数字。此外,文本框中究竟是什么。您似乎对十六进制与十进制与二进制与ASCII相混淆。它们是数字的不同字符串表示。

0xCD不是十六进制值。它是数字的C#符合十六进制表示。 (C#不允许的另一个十六进制表示是CDh)。编译器将其转换为.NET内部格式的数字(恰好是二进制格式,但这并不重要)。然后WriteByteWrite调用将数字存储在二进制文件中。您将从stream.WriteByte(0xCD)stream.WriteByte(206)stream.WriteByte(0316)获得相同的结果,因为编译器会将所有结果转换为相同的内部表示。如果你想编写一个变量,那么根本没有理由使用十六进制,你需要WriteByte期望的内部表示。

你说用户输入0到255之间的数字,十进制数?然后所需的转换是从十进制字符串表示到内部表示,这称为“解析”。

试试这段代码:

stream.WriteByte(Byte.Parse(txtTotalSeasons.Text));

答案 1 :(得分:1)

您是否尝试过:

foreach (var b in totalSeasons)
{
  stream.WriteByte(b);
}

<击> WriteByte一次写入一个字节,而不是一个字节数组。

答案 2 :(得分:0)

考虑使用BinaryWriter