Mappage des données de flux aux structures de données en C

Existe-t-il un moyen de mapper les données collectées sur un flux ou un tableau vers une structure de données ou vice-versa ? En C, il s'agirait simplement de lancer un pointeur vers le flux en tant que type de données que je souhaite utiliser (ou vice-versa pour l'inverse) ex : en C

Mystruct * pMyStrct = (Mystruct*)&SomeDataStream;
pMyStrct->Item1 = 25;

int iReadData = pMyStrct->Item2;

évidemment, la méthode C est assez dangereuse à moins que vous ne soyez sûr de la qualité des données du flux lors de la lecture des données entrantes, mais pour les données sortantes, c'est super rapide et facile.

请先 登录 后评论

3 réponses

gil

si c'est .net des deux côtés :

pensez que vous devriez utiliser la sérialisation binaire et envoyer le résultat byte[].

faire confiance à votre structure pour qu'elle soit entièrement blittable peut être problématique.

vous paierez des frais généraux (à la fois le processeur et le réseau) mais vous serez en sécurité.

请先 登录 后评论
lubos hasko

La plupart des gens utilisent la sérialisation .NET (il existe un binaire plus rapide et un formateur XML plus lent, ils dépendent tous deux de la réflexion et sont tolérants aux versions dans une certaine mesure)

Cependant, si vous voulez le moyen le plus rapide (non sûr), pourquoi pas :

Rédaction :

YourStruct o = new YourStruct();
byte[] buffer = new byte[Marshal.SizeOf(typeof(YourStruct))];
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
Marshal.StructureToPtr(o, handle.AddrOfPinnedObject(), false);
handle.Free();

Lecture :

handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
o = (YourStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(YourStruct));
handle.Free();
请先 登录 后评论
Simon Buchan

Au cas où la réponse de lubos hasko n'était pas assez dangereuse, il y a aussi le moyen vraiment dangereux, en utilisant pointeurs en C

请先 登录 后评论
  • 6 abonnés
  • 0 favoris,527 Feuilleter
  • geocoin posée à 2023-03-03 15:41