我目前正在为我玩的游戏开发演示文件解析器。我一直在查看 PHP 中给出的格式和示例(试图将其转换为 C#),但它使用 fgetc,据我所知,它在 C# 中不可用,只有 C++ 可用。有什么想法可以解决这个问题吗?我试过使用StreamReader.Read()但它不喜欢空值。
如果有人想查看完整的脚本以更好地了解我想要实现的目标,可以在此处找到该示例。
谢谢!
我目前正在为我玩的游戏开发演示文件解析器。我一直在查看 PHP 中给出的格式和示例(试图将其转换为 C#),但它使用 fgetc,据我所知,它在 C# 中不可用,只有 C++ 可用。有什么想法可以解决这个问题吗?我试过使用StreamReader.Read()但它不喜欢空值。
如果有人想查看完整的脚本以更好地了解我想要实现的目标,可以在此处找到该示例。
谢谢!
您需要使用BinaryReader来读取该文件。要阅读int
,可以打电话ReadInt32
。要读取它们的字符串,您需要逐字节读取ReadByte
并与 0 进行比较。
using (var fs = File.OpenRead(filename))
{
using (var reader = new BinaryReader(fs))
{
// reading happens here
}
}
私有字符串 ReadString(BinaryReader reader) { byte b; StringBuilder sb = new StringBuilder(); while ((b = reader.ReadByte()) != 0) { sb.Append((char)b); } 返回 sb.ToString(); }
我在转换代码时犯了一个错误。文件格式表明该字符串的长度为 260 个字符。因此,您需要读取 260 个字节,然后修剪字符串,如下所示:
private string ReadString(BinaryReader reader, int length = 260)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; ++i)
{
byte b = reader.ReadByte();
sb.Append((char)b);
}
return sb.ToString().Trim();
}
要阅读标题,您可以编写:
string hldemo = ReadString(reader, 8);
并读取主机名,例如,它将是:
string host = ReadString(reader);
我认为这几乎是 php 代码的完全相同的副本。有关其他字符串长度,请参阅格式文档,并查看它们的示例代码。我可能错过了什么。