C#中BinaryReader的Readstring;t读取第一个字节

本文关键字:读取 第一个 字节 Readstring BinaryReader | 更新日期: 2023-09-27 18:20:11

我正在使用BinaryReader从C#中的System.IO读取二进制文件,但是,当使用ReadString时,它不会读取第一个字节,下面是代码:

using (var b = new BinaryReader(File.Open(open.FileName, FileMode.Open)))
{
    int version = b.ReadInt32();
    int chunkID = b.ReadInt32();
    string objname = b.ReadString();
}

不是很难的,首先它读取两个int,但应该返回obname的字符串是"bat",相反它返回"at"。

这和我最初读到的两篇文章有关吗?或者可能是因为第一个int和字符串之间没有空字节?

提前谢谢。

C#中BinaryReader的Readstring;t读取第一个字节

正如其本人86在回答中所写,BinaryReader.ReadString()有自己的工作方式,只有当创建的文件使用BinaryWriter.Write(string val)时才应使用。

在您的情况下,您可能有一个固定大小的字符串,可以在其中使用BinaryReader.ReadChars(int count),或者您有一个以null结尾的字符串,必须在其中读取,直到遇到0字节。以下是一种可能的扩展方法,用于读取以null结尾的字符串:

public static string ReadNullTerminatedString(this System.IO.BinaryReader stream)
{
    string str = "";
    char ch;
    while ((int)(ch = stream.ReadChar()) != 0)
        str = str + ch;
    return str;
}

文件中的字符串前面应该有一个7位编码长度。来自MSDN:

从当前流中读取字符串。字符串以长度为前缀,每次编码为七位整数。