Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串未正确加载到结构中_C#_.net_Struct - Fatal编程技术网

C# 字符串未正确加载到结构中

C# 字符串未正确加载到结构中,c#,.net,struct,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; publi

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

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

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


感谢所有在过去发布过struct示例的人,他们为我提供了很大的帮助,但我似乎找不到任何能够准确解决此问题的方法。

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

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

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

哇!工作完美。谢谢