【300分】struct方面高手进!~VC和C#socket传输结构体接收数据不对的问题!
结构体定义的比较复杂 因为有些原因 我只把类型写上来 字段名称就代替一下
[Serializable] // 指示可序列化
[StructLayout(LayoutKind.Sequential)]
public struct Header
{
public uint aa;
public uint bb;
public uint cc;
public uint dd;
public ushort ee;
public ushort ff;
public ushort gg;
public uint hh;
public double ii;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SS
{
public uint jj;
public float kk;
public EA eA;//这是enum
public ET eT;//这是enum
public ET2 eT2;//这是enum
public short ll;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] // 声明一个字符数组,大小为40
public char[] mm;
public SE sE;
public float nn;
public float oo;
}
[StructLayout(LayoutKind.Sequential)]
public struct SG
{
public Header header;
public ushort pp;
public byte qq;
public byte ll;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
public SS[] ss;
}
现在在C#之间发送struct SG,内容接收正确,
如果用VC赋值后发送SG这个结构体 其中
public Header header;
public ushort pp;
public byte qq;
的值可正确接收。
public byte ll;
但是SS这个结构体中的数据都是不对的。现在赋值的时候只定义了SS[0]的值。
把Header前改为[StructLayout(LayoutKind.Sequential, Pack = 1)] 接收数据就只剩下
public uint aa;
public uint bb;
public uint cc;
public uint dd;
public ushort ee;
public ushort ff;
public ushort gg;
是正确的了。。。
高手能给解答一下为什么吗??是内存对齐的问题吗?如何解决呢。300分送上~