Tengo una función de C# que convierte una matriz de bytes a una clase, teniendo en cuenta su tipo:Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
IntPtr buffer = Marshal.AllocHGlobal(rawsize);
Marshal.Copy(data, 0, buffer, rawsize);
object result = Marshal.PtrToStructure(buffer, type);
Marshal.FreeHGlobal(buffer);
utilizo estructuras secuenciales:
[StructLayout(LayoutKind.Sequential)]
public new class PacketFormat : Packet.PacketFormat { }
Esto funcionó bien, hasta que traté de convertir a una estructura/clase que contiene una matriz de bytes.
[StructLayout(LayoutKind.Sequential)]
public new class PacketFormat : Packet.PacketFormat
{
public byte header;
public byte[] data = new byte[256];
}
Marshal.SizeOf(type)
retornos 16, que es demasiado bajo (debe ser 257) y hace que Marshal.PtrToStructure
a fallar con el error siguiente:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
supongo que el uso de una matriz fija sería una solución , pero ¿también se puede hacer sin tener que recurrir a un código inseguro?
Podría utilizar un serializador binario/deserializer en su lugar? http://mikehadlow.blogspot.com/2006/11/using-memorystream-and-binaryformatter.html –
¿Puedes darnos un poco más de información sobre lo que estás haciendo? Si es posible, usar las clases de serialización integradas le ahorrará muchos dolores de cabeza. – ChaosPandion