以前都是用VC,现在要用C#给客户做个DEMO,由于对C#不熟悉,请各位高手帮忙一下
Marshal.Copy (IntPtr, Byte[], Int32, Int32) 怎么写从IntPtr指定位置开始拷贝数据到Byte[]比如从IntPtr 的第100个位置开始拷贝数据到Byte[]中,代码怎么写,谢谢
Marshal.Copy (IntPtr, Byte[], Int32, Int32) 怎么写从IntPtr指定位置开始拷贝数据到Byte[]比如从IntPtr 的第100个位置开始拷贝数据到Byte[]中,代码怎么写,谢谢
Marshal.Copy(IntPtr, _ByteDate, 100开始位置, 100复制100个);
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要复制的数组元素的数目。
测试代码如下:
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
这种方式
// 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);