2013-07-06 2 views
0

Я пытаюсь сделать небольшой «memcpy» взломать C#. Я постоянно застревать на этой части, потому что она не будет преобразовывать System.Type в байт *Получить тип объекта, а затем бросить его?

public unsafe void memcpy(byte* dest, object src, int length) 
    { 
     byte* nsrc; 
     byte* ndst; 
     nsrc = (byte*)((src.GetType())src); 

    } 

Как вы видите, я стараюсь, чтобы получить тип объекта, а затем привести его к исходному объекту.

Любые идеи?

Обновление:

Возможно использование сериализации?

private byte[] ObjectToByteArray(Object obj) 
    { 
     if(obj == null) 
      return null; 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     bf.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 

    private void memcpy(byte[] dest, int pos, object src, int len) 
    { 
     byte[] ba = ObjectToByteArray(src); 
     Array.Copy(ObjectToByteArray(src), 0, dest, pos, len); 
    } 
+0

Что бы вам было хорошего? Бросок полезен только тогда, когда вы знаете тип во время компиляции ... В любом случае, чего вы пытаетесь достичь? Что вы ожидаете от типа src? –

+0

C# не C/C++ вы не можете просто бросать вещи волей-неволей. Это типичный язык, ссылка не может быть указана на указатель. – Mgetz

+0

Я предполагаю, что это то, что вы пытаетесь сделать: http://stackoverflow.com/questions/14141172/getting-a-byte-array-from-a-pinned-object – Douglas

ответ

0

взяты из MSDN: типы

Pointer не наследуют от объекта и не существует никаких преобразований между типами указателей и объектов. Кроме того, бокс и unboxing не указатели поддержки. Однако вы можете конвертировать между различными типами указателей и между типами указателей и целыми типами.

ссылка: http://msdn.microsoft.com/en-us/library/y31yhkeb(v=vs.100).aspx

  int number = 200; 

      unsafe 
      { 
       // Convert to byte: 
       byte* p = (byte*)&number; 
      } 
3

Не ясно, что вы хотите, но, возможно, это полезно?

int yourInt32 = ...; 
byte[] bitsFromInt32Value = BitConverter.GetBytes(yourInt32); 

long yourInt64 = ...; 
byte[] bitsFromInt64Value = BitConverter.GetBytes(yourInt64); 
Смежные вопросы