博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 使用unsafe指针代替Intptr
阅读量:3904 次
发布时间:2019-05-23

本文共 931 字,大约阅读时间需要 3 分钟。

C# 使用unsafe指针代替Intptr,进行数据读取和拷贝

问题描述

在C#中,希望读取IntPtr中的数据,有两种安全的方法:

①使用将IntPtr数据拷贝到byte[]数据类型中,然后读取byte[]中的数据
②按照数据类型,使用直接对数据进行访问
方法①②虽然安全,但都存在一些问题:
方法①拷贝操作慢,并且额外开辟了空间,方法②中Marshal.PtrToStructure()方法访问速度过慢。
为了解决这些问题,使用unsafe指针代替IntPtr。

IntPtr转byte*

IntPtr pRet = GetBuff();byte* memBytePtr = (byte*)pRet.ToPointer();

memBytePtr 指针指向的是pRet数据空间的起始位置

访问byte*中的数据

假设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/

你可能感兴趣的文章
数十种TensorFlow实现案例汇集:代码+笔记
查看>>
python记录的错误与知识
查看>>
内核中各种套接字的关系
查看>>
linux sysctl 参数实现 暨 ip_forward参数对Linux内核转发影响分析
查看>>
linux 路由表 的一些相关资料
查看>>
Linux 路由 学习笔记 之三 路由查找流程分析
查看>>
LINUX IP 路由实现
查看>>
快速重传与快速恢复算法
查看>>
TCP重传定时器
查看>>
CentOS 6.3 - 安装 Nginx 1.2.7(yum源)
查看>>
shell中trap捕获信号
查看>>
关于Linux Shell的信号trap功能你必须知道的细节
查看>>
Linux原始套接字实现分析
查看>>
CENTOS 6.5 配置YUM安装NGINX
查看>>
#ifdef DEBUG的理解
查看>>
Linux 任务控制的几个技巧( &, [ctrl]-z, jobs, fg, bg, kill)
查看>>
慧眼云:基于云计算和大数据分析的主动防御实践
查看>>
58集团监控业务实践:将网站运行信息透明化
查看>>
给Django用户的SQLAlchemy介绍
查看>>
consul http api
查看>>