Logo

¡Bienvenido a Stratos!

Acceder

Foros



¿cómo Copiar Estructuras Extrañas En C#?

Iniciado por Haddd, 04 de Octubre de 2004, 10:36:38 AM

« anterior - próximo »

Haddd

 Bien, tengo este problema. Tengo la estructura siguiente:

struct p
{
Vector3 posicion;
Vector3 Normal;
};



Resulta que es posible que la estructura sea diferente porque depende del tipo de vértice, por ejemplo.

struct p
{
  Vector3 posicion;
  float u,v;
};



Por tanto, sé que SIEMPRE al principio tengo la posición, pero no sé lo que hay detrás.

Pues quiero copiar la posición de un array a otro. En C sería algo así:

[CODE]

void copiar(char *origen, char*destino,int tamañoorigen,int tamañodestino,int numelementos)
{
  for(int c=0;c      memcpy(destino,origen,3*4);// copio la posicion
     origen+=tamañoorigen;
     destino+=tamañodestino;
  }
}

¿Cómo puedo hacer esto en C#?


Warchief

 Sé que no era exactamente lo que querías, así que (a falta de mas conocimientos por mi parte  :( ) sólo puedo recomendar echar un vistazo a esta bonita unsafe clase de memoria:

http://www.csharpfriends.com/Spec/index.as...specID=25.8.htm

donde podemos encontrar:

Citar
class Test 
{ 
   static void Main() { 
      unsafe { 
         byte* buffer = (byte*)Memory.Alloc(256); 
         for (int i = 0; i < 256; i++) buffer = (byte)i; 
         byte[] array = new byte[256]; 
         fixed (byte* p = array) Memory.Copy(buffer, p, 256);
         Memory.Free(buffer); 
         for (int i = 0; i < 256; i++) Console.WriteLine(array); 
      } 
   } 
} 

que usa


// Copies count bytes from src to dst. The source and destination  
  // blocks are permitted to overlap.  
  public static void Copy(void* src, void* dst, int count) {  
     byte* ps = (byte*)src;  
     byte* pd = (byte*)dst;  
     if (ps > pd) {  
        for (; count != 0; count--) *pd++ = *ps++;  
     }  
     else if (ps < pd) {  
        for (ps += count, pd += count; count != 0; count--) *--pd = *--  
        ps;  
     }  
  }  

Haddd

 ¡Esto puede funcionar!! (ole)

Muchísimas gracias (uoh)  

Warchief

Cita de: Haddd¡Esto puede funcionar!! (ole)

Muchísimas gracias (uoh)
Sí, por poder, puede, pero no me hago cargo de los resultados  :rolleyes:  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.