C# 中的 BinaryReader 读取字符串不读取第一个字节

Sey*_*sor 1 c# string binaryreader

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

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

这并不难,首先它读取两个整数,但应该返回 objame 的字符串是“bat”,而它返回的是“at”。

这与我读过的前两个整数有关系吗?或者可能是因为第一个 int 和字符串之间没有空字节?

提前致谢。

T_D*_*T_D 5

正如itsme86在他的回答中所写的那样,BinaryReader.ReadString()它有自己的工作方式,并且仅应在使用创建的文件时使用它BinaryWriter.Write(string val)。

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

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