为简洁明了,结构和变量已经缩短并重命名。
BinaryReader用于填充以下结构:
[StructLayout(LayoutKind.Sequential, Size = 59, CharSet = CharSet.Ansi, Pack = 1)]
public struct TheStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string MyFirstString;
public int MyInt;
public short MyShort;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string MyNextString;
public byte MyByte;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string MyLastString;
public double MyDouble;
}
读入数据后,除第一个成员MyFirstString外,所有变量都包含正确的信息。 MyFirstString仅包含已读取的四个字符的前三个字符。
造成这种情况的原因是什么以及如何纠正?
感谢所有过去发布结构示例的人,他们帮助我做到这一点,但我似乎无法找到解决此问题的任何内容。
答案 0 :(得分:0)
字符串为零终止,因此结构中只放置SizeConst - 1
个字符,后跟终结符字符。
您可以使用字符数组来获取所有字符:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public char[] MyFirstString;