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和字符串之间没有空字节?
提前谢谢。
正如其本人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:
从当前流中读取字符串。字符串以长度为前缀,每次编码为七位整数。