C#数组和结构体之间转换

在c#开发过程中,想要实现c语言中,数组和结构体之间任意转换,该方式在实现协议上特别有用

1.c#结构体字节对齐

使用[StructLayout(LayoutKind.Sequential, Pack = 1)]实现

 [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct test
    {
        public UInt16 aa;
        public byte bb;
        public UInt16 cc;
        public byte dd;
        public byte ee;
    }

2:数组转换到结构体

 byte[] buf = new byte[256];
 byte[] buf2 = new byte[256];

 test Header = new test();
       
 buf[0] = 0x11;
 buf[1] = 0x22;


 //数组转结构体,字节对齐
 IntPtr ptr3 = Marshal.AllocHGlobal(256);//分配非托管内存空间
 Marshal.Copy(buf, 0, ptr3, buf.Length);//将数组数组拷贝到非托管内存指针
 Header = (test)Marshal.PtrToStructure(ptr3, typeof(test));
 Marshal.FreeHGlobal(ptr3);//释放内存

3:结构体转数组

           //结构体转数组
           IntPtr ptr1 = Marshal.GetIUnknownForObject(Header);
           Marshal.Copy( ptr3,buf2, 0, 7);//将数组数组拷贝到非托管内存指针

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值