如何使用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);
}
}
答案 0 :(得分:3)
totalSeasons
不止一个字节,因此您调用Write方法来写入整个字节块。
txtTotalSeasons.Text
应该变成单个字节吗?也许您正在寻找Byte.TryParse
而不是Encoding.GetBytes
。
编辑:提供整个错误消息,而不仅仅是数字。此外,文本框中究竟是什么。您似乎对十六进制与十进制与二进制与ASCII相混淆。它们是数字的不同字符串表示。
0xCD
不是十六进制值。它是数字的C#符合十六进制表示。 (C#不允许的另一个十六进制表示是CDh)。编译器将其转换为.NET内部格式的数字(恰好是二进制格式,但这并不重要)。然后WriteByte
或Write
调用将数字存储在二进制文件中。您将从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。