Bonjour,

En essayant de me bricoler quelques outils (en l'occurence ici, conversion de données videos proprietaire d'un enregistreur TNT vers un format plus standard) je suis de nouveau confronté à un problème que j'avais déjà rencontré lors de l'écriture d'une sorte de parseur RTP. Si le seul objectif était le résultat, je l'écrirais en C, mais désireux d'en profiter pour me familiariser avec C# j'ai choisi de m'y risquer.

Au final mes outils marchent, mais sont d'une lenteur calamiteuse. Mon problème est le suivant:

Imaginons, la structure de données suivante assez simple (entête paquet RTP): http://www.networksorcery.com/enp/protocol/rtp.htm

En C, langage qui m'est plus familier, j'aurais fait quelque chose du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
struct rtp_header{
short version:2 // 2 bits pour la version
short padding:1 // 1 bit de padding
short extension:1 // 1 bit pour l'extension
short extension:4 // 4 bits pour le nombre de CRC
etc... en continuant de mapper un nombre de bits de mes types de bases en fonction de mes besoins.
}
ensuite à partir d'un buffer contenant les octets lus, je ferais un memcpy du buffer dans une instance de cette structure. Le mapping est immédiat et rapide.

En C#, j'ai une classe pour ce type de paquet, qui hérite d'une classe générique et qui définit des attribiuts propre correspondant aux différents champs.
Je remplis donc ces attributs à grand renfort de '&' logiques avec des masques et des décalages de bits.

Cette méthodologie est-elle correcte ? Comment implémenteriez un tel mapping tableau de bits/groupes de bits et dans quel type d'objet (classe, autre..) ?

Merci d'avance pour tout commentaire constructif.