標籤:style http color io 使用 ar 資料 sp 代碼
有幾種方法可以訪問與位元組數組相對應的 IntPtr。
第一種,使用不安全的代碼塊來訪問直接指向位元組數組的指標。
代碼如下 |
複製代碼 |
unsafe { byte[] test = new byte[5]; fixed (byte* p = &test[0]) { *p = 0xff; } } |
第二種,可以使用 GCHandle 來獲得對象。
代碼如下 |
複製代碼 |
using System.Runtime.InteropServices;
byte[] test = new byte[5]; GCHandle hObject = GCHandle.Alloc(test, GCHandleType.Pinned); IntPtr pObject = hObject.AddrOfPinnedObject(); if(hObject.IsAllocated) hObject.Free(); |
第三種, 通過 LocalAlloc 建立記憶體塊並將資料封送處理到該記憶體塊。
代碼如下 |
複製代碼 |
[DllImport("coredll.dll",SetLastError=true)] public static extern IntPtr LocalAlloc(uint uFlags, uint uBytes); [DllImport("coredll.dll",SetLastError=true)] public static extern IntPtr LocalFree(IntPtr hMem); [DllImport("coredll.dll",SetLastError=true)] public static extern IntPtr LocalReAlloc(IntPtr hMem, uint uBytes, uint fuFlags); public const uint LMEM_FIXED = 0; public const uint LMEM_MOVEABLE = 2; public const uint LMEM_ZEROINIT = 0x0040; byte[] test = new byte[5]; IntPtr p = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, (uint)test.Length); if (p == IntPtr.Zero) { throw new OutOfMemoryException(); } else { Marshal.Copy(test, 0, p, test.Length); } |
原文來自:http://www.111cn.net/net/160/66646.htm
asp.net中c# byte[] 轉換為 IntPtr幾種方法