Ho una funzione di C# che converte un array di byte a una classe, dato del tipo:Convertire un array di byte a una classe che contiene un array di byte in C#
IntPtr buffer = Marshal.AllocHGlobal(rawsize);
Marshal.Copy(data, 0, buffer, rawsize);
object result = Marshal.PtrToStructure(buffer, type);
Marshal.FreeHGlobal(buffer);
io uso le strutture sequenziali:
[StructLayout(LayoutKind.Sequential)]
public new class PacketFormat : Packet.PacketFormat { }
Questo ha funzionato bene, fino a quando non ho provato a convertire in una struct/class contenente un array di byte.
[StructLayout(LayoutKind.Sequential)]
public new class PacketFormat : Packet.PacketFormat
{
public byte header;
public byte[] data = new byte[256];
}
Marshal.SizeOf(type)
rendimenti 16, che è troppo bassa (dovrebbero essere 257) e provoca Marshal.PtrToStructure
per riuscire con il seguente errore:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Sto indovinando che utilizza una matrice fissa sarebbe una soluzione , ma può anche essere fatto senza dover ricorrere a codice non sicuro?
Hai bisogno di un serializzatore binario/deserializzatore, invece? http://mikehadlow.blogspot.com/2006/11/using-memorystream-and-binaryformatter.html –
Puoi dare un po 'più di fondo a quello che stai facendo? Se possibile, usare le classi di serializzazione integrate ti farà risparmiare un sacco di mal di testa. – ChaosPandion