博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memcpy, blockcopy的进一步理解
阅读量:5257 次
发布时间:2019-06-14

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

using System;using System.Runtime.InteropServices;using System.IO;namespace tx{    struct ST    {       public byte c1;       public float x;       public int y;    }    class Ct    {        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]        public static extern void MemCopy(byte[] dest, byte[] src, int count);//字节数组到字节数组的拷贝        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]        public static extern void MemCopy(int[] dest, byte[] src, int count);//字节数组到整形数组的拷贝        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]        public unsafe static extern void MemCopy(ref ST dest, byte[] src, int count);//注意只有结构体能这么做,class不可以        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]        public static extern void MemCopy(ref byte dest, ref byte src, int count);//字节数组到整形数组的拷贝        static void Main(string[] args)        {            //测试----------------------------------------------            var ms = new MemoryStream();            BinaryWriter writer = new BinaryWriter(ms);            writer.Write((byte)'a');            writer.Write((byte)'b');            writer.Write((byte)'c');            writer.Write((byte)'d');            writer.Write(10.2f);            writer.Write((Int32)30); writer.Write((byte)'w');            writer.Write((byte)'b');            writer.Write((byte)'c');            writer.Write((byte)'d');            writer.Write((float)799);            writer.Write((Int32)242);            var len = ms.Length;            int[] bs = new int[len/4];            byte[] bss = new byte[len];            byte[] buf = ms.GetBuffer();            var ot = new ST();            ST[] aot = new ST[2];            Buffer.BlockCopy(buf, 0, bs, 0, (int)ms.Length);            //Buffer.BlockCopy(buf, 0, aot, 0, (int)ms.Length);//错误,blockcopy只能用于基元数组            MemCopy(bss, buf, (int)len);            MemCopy(ref ot, buf, (int)len/2);//注意只有结构体能这么做,class不可以            MemCopy(ref aot[0], buf, (int)len);            byte[] sub = new byte[4];        }    }}

 

转载于:https://www.cnblogs.com/timeObjserver/p/7044071.html

你可能感兴趣的文章
GUI编程(五)-----事件监听
查看>>
Jquery
查看>>
django1.4 在SAE上部署!
查看>>
memcached分布式缓存和hibernate结合(续)
查看>>
Hadoop2
查看>>
Spring mvc 数据验证框架注解
查看>>
Linux常用命令汇总
查看>>
webkit.net 浏览器开发
查看>>
SpringMVC集成zipkin性能监控
查看>>
判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日...
查看>>
AJAX(XMLHttpRequest)进行跨域请求方法详解
查看>>
1.1C++入门 未完待续。。。
查看>>
ADO.NET基础必备之SqlDataReader 类
查看>>
python:模块定义、导入、优化
查看>>
python:协程
查看>>
Container With Most Water
查看>>
Map接口
查看>>
Spring的学习
查看>>
HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的区别和联系
查看>>
python中json与pickle的简要说明
查看>>