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];
}
}
}