以前都是用VC,现在要用C#给客户做个DEMO,由于对C#不熟悉,请各位高手帮忙一下
Marshal.Copy (IntPtr, Byte[], Int32, Int32) 怎么写从IntPtr指定位置开始拷贝数据到Byte[]比如从IntPtr 的第100个位置开始拷贝数据到Byte[]中,代码怎么写,谢谢

解决方案 »

  1.   

    byte[] _ByteDate = new byte[100];
    Marshal.Copy(IntPtr, _ByteDate, 100开始位置, 100复制100个);
      

  2.   

    http://msdn.microsoft.com/zh-cn/library/ms146631.aspx.NET Framework 类库
    Marshal.Copy 方法 (IntPtr, array<Byte>[]()[], Int32, Int32)
    public static void Copy(
    IntPtr source,
    byte[] destination,
    int startIndex,
    int length
    )参数
    source
    类型:System.IntPtr内存指针,从中进行复制。destination
    类型:System.Byte[]
    要复制到的数组。startIndex
    类型:System.Int32数组中 Copy 开始位置的从零开始的索引。length
    类型:System.Int32要复制的数组元素的数目。
      

  3.   

    zgke 你的方式不行,你这样写是从IntPtr 从0-99位置的值 赋值给_ByteDate从100-199位置,
    测试代码如下:
     byte[] managedArray = { 1, 2, 3, 4 };
     // Initialize unmanged memory to hold the array.
     int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length;
     IntPtr pnt = Marshal.AllocHGlobal(size);
     Marshal.Copy(managedArray, 0, pnt, managedArray.Length);
     // Copy the unmanaged array back to another managed array.
     byte[] managedArray2 = new byte[managedArray.Length];
     Marshal.Copy(pnt, managedArray2, 2, 2);//managedArray.Length);for (int i = 0; i < 4; i++)
     {
       Debug.WriteLine(managedArray2[i].ToString());
     }
    输出:
    0, 0, 1, 2
      

  4.   

    有没有类似 Marshal.Copy(pnt+2, managedArray2, 0, 2);//managedArray.Length
    这种方式
      

  5.   

    你是要源地址偏移2位啊..byte[] managedArray = { 1, 2, 3, 4 }; 
    // Initialize unmanged memory to hold the array. 
    int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length; 
    IntPtr pnt = Marshal.AllocHGlobal(size); 
    Marshal.Copy(managedArray, 0, pnt, managedArray.Length); 
    // Copy the unmanaged array back to another managed array. 
    byte[] managedArray2 = new byte[managedArray.Length]; 
    Marshal.Copy(new IntPtr(pnt.ToInt32()+2), managedArray2, 2, 2);//managedArray.Length); 
      

  6.   

    还是自己尝试出来了 Marshal.Copy((IntPtr)(Aubufp.ToInt32() + 4080), bytes, 0, 4080);