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 和字符串之间没有空字节?
提前致谢。
正如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)