Witam. Chcę zserializować struct na tablicę bajtów, ale coś się sypie.. mianowicie tablica wyjściowa ma cały czas stały rozmiar (60) i całkowicie nie zgadza się z wartościami zmiennych, i sądzę, że ma to związek z byte[]
jako zmienne w strukturze:
[Serializable]
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
struct GGLOGIN_80
{
public int Uin;
public byte[] Lang;
public byte HashType;
public byte[] Hash;
public int Status;
public int Flags;
public int Features;
public int LocalIP;
public short LocalPort;
public int ExternalIP;
public short ExternalPort;
public byte ImageSize;
public byte Unknown1;
public int VerLength;
public byte[] Ver;
public int DescSize;
public byte[] Desc;
}
Przykładowo do Lang
przypisuje new byte[2] {'p', 'l'};
i wychodzą za każdym razem INNE wartości na pozycjach w tablicy. Jedynie pierwsza zmienna (Uin) gdy przypiszę 100, w tablicy jest {100, 0, 0, 0}.
Serializacja:
byte[] obj = new byte[Marshal.SizeOf(packet)];
IntPtr p = Marshal.AllocHGlobal(obj.Length);
Marshal.StructureToPtr(packet, p, false);
Marshal.Copy(p, obj, 0, obj.Length);
Marshal.FreeHGlobal(p);
Jak zserializować prawidłowo tę strukturę? Myślę, że przyczyną są te tablice byte[]
, ale jak to naprawić? Dodam, że długości tablic byte[]
są zmienne i mogą mieć różne wartości.