字符串未正确加载到 STRUCT 中

String not loading into STRUCT correctly

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

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

是什么原因造成的,如何纠正?

感谢所有过去发布过结构示例的人,他们对我的帮助很大,但我似乎找不到任何能准确解决这个问题的东西。

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

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

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