读书人

【300分】struct方面~VC和C#socket传输

发布时间: 2012-05-29 12:16:00 作者: rapoo

【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分送上~


[解决办法]
char在VC是一个字节
在C#中是2个字节。
[解决办法]
建议都使用byte来传吧。
使用每个类型的时候,最好先测试下他们的大小

而且内存对齐的字节数也要控制好。。
[解决办法]
C++ C#
char* string
传出的char* StringBuilder
short short
char byte
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr
http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
[解决办法]
UP
[解决办法]
public char[] mm; 写成 public fixed byte mm[40]; 不要marshal,但是要加上unsafe并打开unsafe开关
[解决办法]

探讨
怎么把帖子设置成300分呢。。

[解决办法]
up

[解决办法]
项目属性里有开关。
sg.ss[0].mm = 1;不能这么访问
应该sg.ss[0].mm[0]=xx;
sg.ss[0].mm[1]=xx;......
[解决办法]
来学习的
[解决办法]
c#的某些类型大小和C++的不一样的

都sizeof一下
[解决办法]

[解决办法]
咩看太明白,不过有两个问题需要注意,一个是类型的大小,另一个是数据在内存中的对齐方式。
[解决办法]
貌似解决了,剩下就是jf了
[解决办法]
没有看明白呢
[解决办法]
数据类型要相互对应和兼容
[解决办法]
学习
[解决办法]
我 用的貌似是固定大小的结构题

读书人网 >C#

热点推荐