Solution 1 - Super rapide mais dangereux:
- Créer votre classe avec
[StructLayout(LayoutKind.Sequential)]
et toutes les autres marques de code non managé pour la longueur. Vos chaînes seront char array mais peuvent être exposées en tant que chaîne après le chargement.
- Lire 180 octets et créer un tableau d'octets de la même taille dans un
fixed
bloc
- Modifier pointeur sur
IntPtr
et utiliser Marshal.PtrToStructure()
pour charger un onject de votre classe
Solution 2 - logique de chargement dans le classe:
- Créer un constructeur dans votre classe qui accepte
byte[]
et à l'intérieur des objets à l'aide Covenrt.Toxxx
ou Encoding.ASCII.ToString()
en supposant qu'il est ASCII
- Lire 180 octets et créer un objet et le transmettre à .ctor
- Si vous devez serialise revenir à
byte[]
mettre en œuvre ensuite une méthode ToByteArray() et utiliser à nouveau Covenrt.Toxxx
ou Encoding.ASCII.ToString()
d'écrire à l'octet.
Amélioration des solutions 2:
Créer des attributs personnalisés et décorer vos classes avec ceux afin que vous puissiez avoir une usine qui lit les métadonnées et vos objets à l'aide gonfle tableau d'octets pour vous. Ceci est très utile si vous avez plus de deux classes de ce type.
Alternative aux solutions 2:
Vous pouvez passer d'un cours d'eau au lieu tableau d'octets qui est plus rapide.Ici vous utiliseriez BinaryReader et BinaryWriter pour lire et écrire des valeurs. Les cordes est cependant un peu un truc car il écrit aussi la longueur je pense.
VAR_END_INDEX devrait vraiment être appelé VAR_LENGTH – juharr