C#指针操作Marshal实例

本文介绍了C#中如何利用指针进行内存操作,特别是结合Marshal类,可以方便地获取非托管内存的IntPtr指针,并将其转换为不同类型指针,进行数据的Copy、Read和Write等操作。
摘要由CSDN通过智能技术生成

 

复制代码

        static void Main(string[] args)
        {
            byte[] a = new byte[]{0,0,0,0};
            byte[] b = new byte[] {1,2,3,4};
            IntPtr pt = Marshal.AllocHGlobal(a.Length);
            //从source数组的startIndex下标开始复制length个对象到ptr;
            Marshal.Copy(b,0,pt+0,b.Length);
            //从ptr复制length个对象到目标数组的,从目标数组的startIndex开始写入。
            Marshal.Copy((pt+1),a,1,2);
            unsafe
            {
                byte* pb = (byte*) pt;
                for (int i = 0; i < a.Length; i++)
                {
                    Console.WriteLine("/b:"+(*pb++) + "/a:" + a[i]);
                }
            }
            //释放非托管内存;
            Marshal.FreeHGlobal(pt);

            byte[] arBt = new byte[]{200,0,20,30,40,50,60,70,80,90,11,12,13,14,0x0f,199};
            IntPtr ptr = Marshal.AllocHGlobal(arBt.Length);
            //写入数据;
            Marshal.Copy(arBt, 0, ptr, arBt.Length);
            short[] arSt = new short[arBt.Length / sizeof(short)];
            int[] arInt = new int[arBt.Length / sizeof(int)];
            //复制为short数据;
            Marshal.Copy(ptr, arSt, 0, arSt.Length);
            //调整数据 此时arSt不变 下面的arInt改变;
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值