2010-02-25 4 views
1
Struct { 
byte F1[2] 
SHORT F2 
byte F3[512] 
} BPD 


CBD 
{ 
SHORT CLENGTH 
byte DATA[] 
} 

Ci-dessus, structure 2 C++. Voici SHORT est de 2 octets signés. Quel serait le meilleur moyen de le convertir en C#?Structure de longueur fixe/variable en conversion C# et big endian

(Notez que dans 2 longueur de struture de données est uundefined.)

Je l'ai vu après deux liens.

Fixed length strings or structures in C#

et

Reading a C/C++ data structure in C# from a byte array

Après la lecture des données dans la structure i besoin de la variable covert court pour big endian. (inverser les octets).

Répondre

-2

Résolu moi-même.

Les structures sont bonnes mais si vous ne modifiez aucune classe de données, il vaut mieux les utiliser. J'ai créé des classes en C# pour la structure C++ et pour la conversion big to little endian j'ai créé 3 fonctions de bibliothèque et ça marche pour moi.

Thnaks tout le monde pour la contribution précieuse.

+1

Vous souhaitez partager votre code? – Pat

0

Seul le 'court' est nécessaire pour être converti. Tableau d'octets identiques sur la plate-forme big/little endian.

Ainsi, il suffit de lire les structures et faire quelque chose comme ceci:

data.F2 = ((uint) data.F2 >> 8) | (((uint) données.F2 & 0xFF) < < 8);

et

data.CLENGTH = ((uint) data.CLENGTH >> 8) | (((uint) data.CLENGTH & 0xFF) < < 8);

+0

Merci pour la réponse. Ma première question est là. La meilleure façon d'extraire des données d'un tableau d'octets. La convertir en structure? Mettre des données d'octets dans un constructeur de classe et les traiter en classe? J'ai plus de 100 structures à gérer et celles-ci sont imbriquées jusqu'à 10 niveaux. – Manjoor

+0

Pour la première structure - oui, le 'type de valeur C#' est optimal. Pour la deuxième structure, il est préférable de le remplacer par un tableau dynamique. – qehgt

+0

pouvez-vous me montrer comment? – Manjoor

Questions connexes