zoukankan      html  css  js  c++  java
  • Memcpy, blockcopy的进一步理解

    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];
    
            }
    
        }
    
    }
  • 相关阅读:
    原生JS(类、原型、构造函数)
    原生JS(cookie操作的封装)
    原生JS(cookie)
    原生JS(异步请求)
    原生js(1)
    iframe框架嵌套页面(全屏,页面上下左右有空白,去双滚动条)
    Zabbix4.0监控Nginx1.16
    Nginx1.16访问限制
    django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
    Zabbix4.0解决中文乱码
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/7044071.html
Copyright © 2011-2022 走看看