字符串未正确加载到 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;
为了简洁明了,结构和变量已被缩短和重命名。
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;