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 与指针相关推荐

  1. 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 ...

  2. 关于获取网络流,根据网络流转byte[],本地文件流转byte[],方法记录

    /*** 根据文件路径读取byte[] 数组*/public static byte[] readFileByBytes(String filePath) throws IOException {Fi ...

  3. Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte

    Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte 转载于:https://www.cnblogs.com/stu-xu/archive/2011/09/19 ...

  4. 串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验

    bytez转String /*** 字节数组转换成对应的16进制表示的字符串** @param src* @return*/ public static String bytes2HexStr(byt ...

  5. java的byte和C#的byte的不同之处

    Java byte 也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127, byte,即字节,由8位的二进制组成.在Java中 ...

  6. java int转byte数组_javaint转byte数组

    JAVA中怎么将int数据转换为byte数据? 例如将int b=325转换为 byte a,结果为多少啊? JAVA中根据以下代码将int数据转换为byte数据: public static byt ...

  7. Hex字符串转byte数组 汉字转byte数组

    java 字符串转换成gb2312编码格式 字符串"电池"变为 {0xB5,0xE7,0xB3,0xD8},再截取出B5E7B3D8 public static String co ...

  8. 智能指针可以放到容器中么_Rust语言入门教程 智能指针篇

    指针 (pointer)是一个包含内存地址的变量的通用概念.这个地址引用,或 "指向"(points at)一些其他数据.Rust 中最常见的指针是第四章介绍的 引用(refere ...

  9. c语言中指针往内存写值,C语言编程常见问题解答之指针和内存分配

    指针为C语言编程提供了强大的支持--如果你能正确而灵活地利用指针,你就可以直接切入问题的核心,或者将程序分割成一个个片断.一个很好地利用了指针的程序会非常高效.简洁和精致. 利用指针你可以将数据写入内 ...

  10. c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量

    一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000,各下标变量的首地址及其值如图所示. 在前面曾经介绍过, ...

最新文章

  1. 3分钟解决MySQL 1032 主从错误
  2. 正向代理服务器和反向代理服务器的区别
  3. oracle 11g-R2安装
  4. vue如何强行停止ajax请求,VueJs和VueResource,从Ajax请求中删除头字段
  5. 这个转录组比对工具很快,十几分钟一个样品
  6. 第一次学游泳技巧_游泳前,让自己不再怕水的5堂准备课
  7. JAVA如何比较两个数组是否相等?
  8. 从入门到进阶,这10本高分书籍,优秀数据分析师越早读完越好
  9. Reddit大热,伯克利PPT带你丝滑入门机器学习:知识点全面覆盖,笔记可搭配食用...
  10. mc冒险者传说java_我的世界冒险者传说1.9
  11. java 时区 mysql 时区:时区在程序和数据库中的作用及其机制
  12. 业余草尚硅谷Java视频教程_SpringBoot视频教程免费下载
  13. 学习华为云人脸识别踩坑,The subservice has not been subscribed和FRS.0020错误,projectId的获取
  14. Object Detection in 20 Years: A Survey 20年间的目标检测:综述
  15. 2022Android春招面试,实战分析
  16. 数据分析2021年最实用工具排名前6位出炉
  17. 端到端的语音识别模型
  18. 9.1 爬虫及爬行方式
  19. 分享130个ASP源码,总有一款适合您
  20. 呼叫中心系统提升电销效率

热门文章

  1. Gitlab备份与恢复[七]
  2. 实现Web虚拟现实的最轻松方案—A-Frame框架
  3. 我的pygraphviz安装之路
  4. Flash补间引擎应用:图片特效(2)
  5. LED适用范围及寿命
  6. VC++对话框学习总结
  7. .Net装箱拆箱编程实例
  8. vue token 过期处理
  9. BZOJ 2744: [HEOI2012]朋友圈
  10. ARC下带CF前缀的类型与OC类型转换