字符串未正确加载到STRUCT中

时间:2015-03-23 23:27:53

标签: c# .net struct

为简洁明了,结构和变量已经缩短并重命名。

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仅包含已读取的四个字符的前三个字符。

造成这种情况的原因是什么以及如何纠正?

感谢所有过去发布结构示例的人,他们帮助我做到这一点,但我似乎无法找到解决此问题的任何内容。

1 个答案:

答案 0 :(得分:0)

字符串为零终止,因此结构中只放置SizeConst - 1个字符,后跟终结符字符。

您可以使用字符数组来获取所有字符:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public char[] MyFirstString;