现在的位置: 主页 > 公司荣誉 > 文章正文
asp.net中c# byte[] 转换为 IntPtr几种方法
作者:吴桥县齐源纤维素有限公司 来源:www.qy-xws.com 发布时间:2017-09-13 13:29:55
asp.net中c# byte[] 转换为 IntPtr几种方法

有几种方法可以访问与字节数组相对应的 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);
}


企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:孝感SEO http://xiaogan.raoyu.net


  • 上一篇:php 新浪通行证登录 新浪微博登录 模拟登录 (浏览器版
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 吴桥县齐源纤维素有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100