C# 指针的使用 ref byte 转 byte 或 byte [] ref 与指针
C# 不推荐用指针,但可以使用指针,同时在某些情况下又不得不使用指针,比如C#调用了C++的DLL,而经常会用到指针
下在介绍C#代码中使用指针:
1,首先要使用指针,先在要C#工程属性中设置 ( 右键工程名 -》属性-》生成 ) ”允许不安全代码“:
2,添加 引用 using System.IO;
3,工程中用到指针的针码段用 unsafe{ } 包住,如下:
unsafe
{
fixed ( byte* p = &buf )
{
using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, size, size, FileAccess.Read))
{
ms.Read(tbuf, 0, tbuf.Length);
}
}
}
4,设置 UnmanagedMemoryStream 的读写权限:FileAccess.Read ,FileAccess.Write ,FileAccess.ReadWrite 三种
如,从指针中读取内容到 Byte [] tbuf数组中。
using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, size, size, FileAccess.Read))
{
ms.Read(tbuf, 0, tbuf.Length);
}
往指针中读写入 Byte [] tbuf数组中 内容。
using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, size, size, FileAccess.ReadWrite))
{
ms.Write(tbuf, 0, size);
}
5,给下完整的实现例子
public void write(ref Byte buf, Byte size){Byte[] tbuf = new Byte[size];unsafe{fixed ( byte* p = &buf ){using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, size, size, FileAccess.Read)){ms.Read(tbuf, 0, tbuf.Length);} }}serialPort1.Write(tbuf, 0, size);return;}public Byte read(ref Byte buf, Byte size, Byte mstimeout){Byte[] tbuf = new Byte[10];DateTime now = DateTime.Now;int s,rc;do{rc = serialPort1.Read(tbuf, 0, size);if (rc == size){unsafe{fixed ( byte* p = &buf ){using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, size, size, FileAccess.ReadWrite)){ms.Write(tbuf, 0, size);}}}ServoTest.Text = string.Format("{0:X02} {1:X02} {2:X02} {3:X02} {4:X02} {5:X02} {6:X02} {7:X02} {8:X02} {9:X02} ",tbuf[0], tbuf[1], tbuf[2], tbuf[3],tbuf[4],tbuf[5],tbuf[6],tbuf[7],tbuf[8],tbuf[9]); return 0;}TimeSpan spand = DateTime.Now - now; s = spand.Milliseconds; }while (s < mstimeout);return 1;}
C# 指针的使用 ref byte 转 byte 或 byte [] ref 与指针相关推荐
- java write_java中write(byte[] b)与write(byte[] b,int off,int len)区别
在项目中要上传文件或者图片 private static final int BUFFER_SIZE = 16 * 1024; private static void copy(File src, F ...
- 关于获取网络流,根据网络流转byte[],本地文件流转byte[],方法记录
/*** 根据文件路径读取byte[] 数组*/public static byte[] readFileByBytes(String filePath) throws IOException {Fi ...
- Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte
Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte 转载于:https://www.cnblogs.com/stu-xu/archive/2011/09/19 ...
- 串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验
bytez转String /*** 字节数组转换成对应的16进制表示的字符串** @param src* @return*/ public static String bytes2HexStr(byt ...
- java的byte和C#的byte的不同之处
Java byte 也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127, byte,即字节,由8位的二进制组成.在Java中 ...
- java int转byte数组_javaint转byte数组
JAVA中怎么将int数据转换为byte数据? 例如将int b=325转换为 byte a,结果为多少啊? JAVA中根据以下代码将int数据转换为byte数据: public static byt ...
- Hex字符串转byte数组 汉字转byte数组
java 字符串转换成gb2312编码格式 字符串"电池"变为 {0xB5,0xE7,0xB3,0xD8},再截取出B5E7B3D8 public static String co ...
- 智能指针可以放到容器中么_Rust语言入门教程 智能指针篇
指针 (pointer)是一个包含内存地址的变量的通用概念.这个地址引用,或 "指向"(points at)一些其他数据.Rust 中最常见的指针是第四章介绍的 引用(refere ...
- c语言中指针往内存写值,C语言编程常见问题解答之指针和内存分配
指针为C语言编程提供了强大的支持--如果你能正确而灵活地利用指针,你就可以直接切入问题的核心,或者将程序分割成一个个片断.一个很好地利用了指针的程序会非常高效.简洁和精致. 利用指针你可以将数据写入内 ...
- c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量
一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000,各下标变量的首地址及其值如图所示. 在前面曾经介绍过, ...
最新文章
- 3分钟解决MySQL 1032 主从错误
- 正向代理服务器和反向代理服务器的区别
- oracle 11g-R2安装
- vue如何强行停止ajax请求,VueJs和VueResource,从Ajax请求中删除头字段
- 这个转录组比对工具很快,十几分钟一个样品
- 第一次学游泳技巧_游泳前,让自己不再怕水的5堂准备课
- JAVA如何比较两个数组是否相等?
- 从入门到进阶,这10本高分书籍,优秀数据分析师越早读完越好
- Reddit大热,伯克利PPT带你丝滑入门机器学习:知识点全面覆盖,笔记可搭配食用...
- mc冒险者传说java_我的世界冒险者传说1.9
- java 时区 mysql 时区:时区在程序和数据库中的作用及其机制
- 业余草尚硅谷Java视频教程_SpringBoot视频教程免费下载
- 学习华为云人脸识别踩坑,The subservice has not been subscribed和FRS.0020错误,projectId的获取
- Object Detection in 20 Years: A Survey 20年间的目标检测:综述
- 2022Android春招面试,实战分析
- 数据分析2021年最实用工具排名前6位出炉
- 端到端的语音识别模型
- 9.1 爬虫及爬行方式
- 分享130个ASP源码,总有一款适合您
- 呼叫中心系统提升电销效率