关于C#结构体\类 对等C语言结构体的问题

目前在学C/S,服务端用C写的,客户端用C#,服务端现在接受数据用的是结构体,客户端目前只会将数据按顺序排列好放入byte[],然后发送到服务端,看起来简单也方便理解,但是每次数据对齐都很麻烦,请问有木有比较方便的方法?

C#不是太精通,试过序列化,但是序列化出来的数据貌似很多七七八八的东西比如版本号什么的,显然不能直接放入C语言的结构体中。

1个回答

用[StructLayout(LayoutKind.Sequential)],可以让C#的结构体兼容C++的
进一步用[FieldOffset]可以指定某个成员相对结构体内存的位置

具体参考
https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.structlayoutattribute.aspx

qq76951609
time16099 回复time16099: 目前暂时用一个类顶替了,在里面声明一个指定长度public byte数组,构造函数里面检查超过允许长度就截取前面的,然后将参数转为二进制放入byte,试用的时候获取这个类里面的byte数组。感觉比C还麻烦。
大约 4 年之前 回复
qq76951609
time16099 谢谢回复,[StructLayout(LayoutKind.Sequential)]这个尝试过,好像结构体大小有点问题,可以指定成员的开始位置,但是没办法限制成员的结束位置,试了SIZE定义结构体长度,但是里面的string还是可以赋超长的值结长度都超过size了。
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问