解决C#结构体数组间的转化问题的由来:在写C#TCP通信程序时,发送数据时,如果是和VC6.0等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把byte数组转换为结构体,要在C#中发送结构体,可以按以下方法实现:

创新互联是一家专业提供临河企业网站建设,专注与成都做网站、成都网站制作、H5技术、小程序制作等业务。10年已为临河众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
(1)解决C#结构体数组间的转化之定义结构体:
- //命名空间
 - using System.Runtime.InteropServices;
 - //注意这个属性不能少
 - [StructLayoutAttribute(
 - LayoutKind.Sequential,
 - CharSet=CharSet.Ansi,Pack=1)]
 - struct TestStruct
 - ...{
 - public int c;
 - //字符串,SizeConst为字符串的***长度
 - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
 - public string str;
 - //int数组,SizeConst表示数组的个数,在转换成
 - //byte数组前必须先初始化数组,再使用,初始化
 - //的数组长度必须和SizeConst一致,例test = new int[6];
 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
 - public int[] test;
 - }
 
(2)解决C#结构体数组间的转化之byte数组转结构体:
- /**////
 - /// byte数组转结构体
 - ///
 - /// byte数组
 - /// 结构体类型
 - ///
 转换后的结构体 - public static object BytesToStuct(byte[] bytes,Type type)
 - ...{
 - //得到结构体的大小
 - int size = Marshal.SizeOf(type);
 - //byte数组长度小于结构体的大小
 - if (size > bytes.Length)
 - ...{
 - //返回空
 - return null;
 - }
 - //分配结构体大小的内存空间
 - IntPtr structPtr = Marshal.AllocHGlobal(size);
 - //将byte数组拷到分配好的内存空间
 - Marshal.Copy(bytes,0,structPtr,size);
 - //将内存空间转换为目标结构体
 - object obj = Marshal.PtrToStructure(structPtr, type);
 - //释放内存空间
 - Marshal.FreeHGlobal(structPtr);
 - //返回结构体
 - return obj;
 - }
 
解决C#结构体数组间的转化的相关内容就向你介绍到这里,希望对你学习和了解解决C#结构体数组间的转化方法有所帮助。
                文章名称:解决C#结构体数组间的转化
                
                本文地址:http://www.csdahua.cn/qtweb/news38/266988.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网