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)); writer.Write((byte)'w');
writer.Write((byte)'b');
writer.Write((byte)'c');
writer.Write((byte)'d');
writer.Write((float));
writer.Write((Int32));
var len = ms.Length;
int[] bs = new int[len/];
byte[] bss = new byte[len]; byte[] buf = ms.GetBuffer();
var ot = new ST();
ST[] aot = new ST[];
Buffer.BlockCopy(buf, , bs, , (int)ms.Length);
//Buffer.BlockCopy(buf, 0, aot, 0, (int)ms.Length);//错误,blockcopy只能用于基元数组
MemCopy(bss, buf, (int)len);
MemCopy(ref ot, buf, (int)len/);//注意只有结构体能这么做,class不可以
MemCopy(ref aot[], buf, (int)len); byte[] sub = new byte[]; } } }
Memcpy, blockcopy的进一步理解的更多相关文章
- Java内存管理的进一步理解-模拟过程图解
Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区 方法区存放装载的类数据信息包括: ...
- 对于python装饰器结合递归的进一步理解
对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...
- 对iOS后台模式最多10分钟运行时间的进一步理解
在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...
- AutoResetEvent waitone set进一步理解补充
AutoResetEvent 的定义 //定义两个信号锁 AutoResetEvent ReadTxt = new AutoResetEvent(false); AutoResetEvent Uplo ...
- 对Java中字符串的进一步理解
字符串在程序开发中无处不在,也是用户交互所涉及到最频繁的数据类型,那么字符串不仅仅就是我们简单的理解的String str = "abc";一起来更加深入的看一下 在Java中,字 ...
- 通过回调函数的理解来进一步理解ajax及其注意的用法
一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...
- 『cs231n』卷积神经网络的可视化与进一步理解
cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非 ...
- 关于iOS 类扩展Extension的进一步理解
很多人可能会问 iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识:但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻. 这里就讲一下我自己的理解,但是这个 ...
- KVO 的进一步理解
这篇文章讲述了KVO的深入理解 http://blog.csdn.net/kesalin/article/details/8194240 对kvo有了更深入的理解 如下连接的文章讲述了kvo接口的一些 ...
随机推荐
- halcon之扫描文档祛底色
halcon之扫描文档祛底色增 很多扫描APP都有祛底色的功能:用于改善成像质量,通常扫描后的图像可能会用于存档或 ...
- 简单使用dom4j
package com.dom4j; import java.io.FileWriter; import java.io.IOException; import java.io.Unsupported ...
- 『转』Dr.Web Security Space 8 – 免费3个月
简短的测试五个问题,任意回答问题,都将获得Dr.Web Security Suite 3个月免费许可证以及大蜘蛛企业安全套件2个月来保护整个公司!活动地址:https://www.drweb.com/ ...
- 201621123010《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口.面向接口编程 interface.implements has-a 关系 Comparable.Comparator 1. ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- 2018.12.20 L195
Every Brazilian, including current and former members of the armed forces, will have to compromise u ...
- Ubuntu系统配置apt-get软件更新源
从别人那摘录的Ubuntu源,测的很好用 # 电子科技大学 (教育网) deb http://ubuntu.uestc.edu.cn/ubuntu/ oneiric main restricted u ...
- IO包中的其他类总结
一.PrintStream和PrintWriter PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. PrintStream 打印的所有字符都使用平台的默认字符 ...
- 《FDTD electromagnetic field using MATLAB》读书笔记 Figure 1.2
函数f(x)用采样间隔Δx=π/5进行采样,使用向前差商.向后差商和中心差商三种公式来近似一阶导数. 书中代码: %% ---------------------------------------- ...
- Spring boot启动原理
1.入口类 /** * springboot应用的启动入口 */ @RestController @SpringBootApplication public class SampleApplicati ...