Je suis coincé sur celui-ci.Lecture de données binaires en utilisant MarshalAs et StructLayout
Je lis un fichier binaire qui a te format suivant:
Field name Size in bytes Example
-------------------------------------
Date 19 1998_12_22 PM 20:15
Serial 4 0001
Utilisation de la struct suivante et en utilisant les réponses à this question je suis en train de lire le fichier.
[StructLayout(LayoutKind.Explicit, Size=23, Pack = 1)]
struct MeasurementStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 19)]
[FieldOffset(0)]
public string Date;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
[FieldOffset(19)]
public string Serial;
}
Cependant, lors de l'instanciation de la classe qui détient ce struct je reçois une erreur à FieldOffset 19. Malheureusement, cette erreur est en néerlandais mais il signifie à peu près « Impossible de charger MeasurementStruct parce que le champ à la sortie 19 est pas bien aligné (les champs peuvent se chevaucher) ".
J'ai découvert que la modification du FieldOffset [19] à FieldOffset [20] fait disparaître l'erreur. Cependant, 20 n'est pas le bon décalage dans mon cas, n'est-ce pas?
c'est une faute de frappe! Fixe .. –
merci pour votre réponse. la structure que j'ai donnée était juste une version simplifiée du format de fichier. Le format réel est beaucoup plus grand et complexe, donc encoder tous les champs un par un n'est pas vraiment une option –