C#でもC言語のmemcpy()ようにメモリーコピーをしたい場合があります。その方法の説明をします。

Marshal クラス

名前空間: System.Runtime.InteropServices MSDN アンマネージ コードを扱うときに使用できるさまざまなメソッドを提供します。

アンマネージ メモリの割り当て、アンマネージ メモリ ブロックのコピー、マネージ型からアンマネージ型への変換などができます。

★構造体サンプル

struct Hoge {
  public int a;
  public int b;
  public int c;
}

 

メモリに構造体のデータをコピーする方法

Hoge obj = new Hoge();
int size = Marshal.SizeOf(obj);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj, ptr, false);

 

Byte配列にデータをコピーする方法

Hoge obj = new Hoge();
int size = Marshal.SizeOf(obj);
byte[] bytes = new byte[size];
GCHandle gch = GCHandle.Alloc(bytes, GCHandleType.Pinned);
Marshal.StructureToPtr(obj, gch.AddrOfPinnedObject(), false);
gch.Free();