我在做c#读取已有的mfc 序列化的文件,读取到其中一个CStringArray数组时,本来里面是没有数据的,不知道是什么原因,里面保存了一堆别的数据结构(好几种类型)的数据,使用BinaryReader 类{BinaryReader br = new BinaryReader(fs, UnicodeEncoding.GetEncoding("GB2312"))}的ReadString()读取是会出错的。后来分析内存数据时,发现一个解决方法,记于此,以供以后查阅。(本人刚学c#,有错误或者更好的方法,请您给我留言!谢谢!)
以下整段代码模仿一个CStringArray 类的序列化过程:
int Count = br.ReadUInt16();
for (int j = 0; j < Count; j++)
{
int lenght = br.ReadByte();
if (lenght == 0xFF)//字符串的长度需要2字节表示
{
int cd1 = br.ReadByte();
int cd = br.ReadByte();
cd = cd << 8 + cd1;
br.ReadBytes(cd);
}
else if (lenght != 0)
{
br.ReadBytes(lenght);
}
}