本文共 931 字,大约阅读时间需要 3 分钟。
在C#中,希望读取IntPtr中的数据,有两种安全的方法:
①使用将IntPtr数据拷贝到byte[]数据类型中,然后读取byte[]中的数据 ②按照数据类型,使用直接对数据进行访问 方法①②虽然安全,但都存在一些问题: 方法①拷贝操作慢,并且额外开辟了空间,方法②中Marshal.PtrToStructure()方法访问速度过慢。 为了解决这些问题,使用unsafe指针代替IntPtr。IntPtr pRet = GetBuff();byte* memBytePtr = (byte*)pRet.ToPointer();
memBytePtr 指针指向的是pRet数据空间的起始位置
假设memBytePtr
中数据是按照float float float byte byte byte float float float byte byte byte
…顺序排列的:
private Vector3 xyz;//存放位置坐标private Color colorRGB;//存放颜色int lengthFloat = 4;int lengthChar = 1;xyz.x = *(float*)memBytePtr;memBytePtr += lengthFloat;xyz.y = *(float*)memBytePtr;memBytePtr += lengthFloat;xyz.z = *(float*)memBytePtr;memBytePtr += lengthFloat; colorRGB.r = *memBytePtr;memBytePtr += lengthChar;colorRGB.g = *memBytePtr;memBytePtr += lengthChar;colorRGB.b = *memBytePtr;memBytePtr += lengthChar;colorRGB = new Color(colorRGB.r, colorRGB.g, colorRGB.b);
转载地址:http://jloen.baihongyu.com/