décaler des bits
TomDev83
Membre
Bonjour à tous et à toutes,
Voilà depuis quelques semaine que je travail sur le portage d'un application windobe codée en VB.NET sous mac mais je rencontre un problème dans une classe qui parse les packets reçu par l'utilisation de socket, je ne sais vraiment pas comment décaler des bits dans un NSMutableData ou autres.
Le packet est à la base un NSMutableData, il faut juste que je puisse obtenir le MessageId qui est un short.
Bref voici le code problématique en VB.NET :
J'ai trouvé cela :
Mais je ne sais pas comment décaler des bits dans un NSMutableData.
J'espère que certains d'entre vous connaissent bien le VB pour pouvoir me traduire cette classe, sinon mon projet tombe à l'eau et j'aurais traduit les 3/4 des classes pour rien...
Merci d'avance pour votre aide !
Et j'espère pouvoir à mon tour aider la communauté !
Voilà depuis quelques semaine que je travail sur le portage d'un application windobe codée en VB.NET sous mac mais je rencontre un problème dans une classe qui parse les packets reçu par l'utilisation de socket, je ne sais vraiment pas comment décaler des bits dans un NSMutableData ou autres.
Le packet est à la base un NSMutableData, il faut juste que je puisse obtenir le MessageId qui est un short.
Bref voici le code problématique en VB.NET :
class Packet<br /> {<br /> public Packet(string packet)<br /> {<br /> this.PacketString = packet;<br /> }<br /><br /> public string PacketString<br /> {<br /> get;<br /> set;<br /> }<br /><br /> public byte[] PacketBytes<br /> {<br /> get<br /> {<br /> return Encoding.Default.GetBytes(this.PacketString);<br /> }<br /> }<br /><br /> public short MessageId<br /> {<br /> get<br /> {<br /> return (short)((( PacketBytes[0] << 8 ) + PacketBytes[1] ) >> 2);<br /> }<br /> }<br /> }
J'ai trouvé cela :
L'opérateur << décale à gauche les bits du premier opérande du nombre de positions spécifié. Les bits de poids fort situés en dehors de la plage du type de résultat sont éliminés, et les positions libérées par les bits de poids faible sont remplies par des zéros.
L'opérateur >> décale à droite les bits du premier opérande du nombre de positions spécifié. Les bits de poids faible sont éliminés et, si l'opérande de gauche est positif, les positions libérées par les bits de poids fort sont mises à zéro ; s'il est négatif, elles sont mises à un. Si l'opérande de gauche est de type Byte, les bits de poids fort disponibles sont remplis par des zéros.
Mais je ne sais pas comment décaler des bits dans un NSMutableData.
J'espère que certains d'entre vous connaissent bien le VB pour pouvoir me traduire cette classe, sinon mon projet tombe à l'eau et j'aurais traduit les 3/4 des classes pour rien...
Merci d'avance pour votre aide !
Et j'espère pouvoir à mon tour aider la communauté !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est quand même pas bien compliqué parce que c'est exactement la même chose qu'en VB, et que pour récupérer un tableau "C" à partir d'un NS(Mutable)Data il suffit de lire la doc... ::)
Par contre, je viens de relire le code et un truc me chagrine: "PacketBytes[0] << 8" vaut toujours 0 si PacketBytes est un tableau de byte...
Edit: En fait, maintenant que je comprends ce que fait le code (je n'avais pas vraiment réfléchi au but, juste au moyen de traduire d'un langage à l'autre), Chacha a raison: Utiliser CFSwapInt16BigToHost() qui va remplacer le décalage de 8 à gauche et l'addition, et se contenter de faire le décalage à droite de 2 pour terminer est la bonne solution.
Ca devrait donc donner un truc du genre:
Aussi, si l'objet est un NSData, tu n'as pas le droit de modifier les données retournées par -bytes. Il faut que l'objet soit un NSMutableData et que tu modifies le buffer retourné par -mutableBytes.