IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Accéder aux champs d'un paquet


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut Accéder aux champs d'un paquet
    Bonjour

    Dans un programme je suis amené à échanger des paquets en réseau entre deux pc. J'ai un champ en particulier auquel je dois accéder en lecture/écriture. Le champ est composé de 8bits et divisé en deux parties:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              7       6       5       4       3       2       1       0
          +-------+-------+-------+-------+-------+-------+-------+-------+
          |   0   |   0   |   0   |   0   | Neighbor Type |   Link Type   |
          +-------+-------+-------+-------+-------+-------+-------+-------+
    J'ai pu avoir un exemple sur le net qui propose de faire pour la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	       int lt = hello_msg.link_code() & 0x03;
    		int nt = hello_msg.link_code() >> 2;
     
                 // link_code fonction qui revoir tout le champs 
                 //lt=link type
               // nt neibghbor type
    j'ignore à quoi sert le "0x03" et ">>2"

    merci pour votre aide

  2. #2
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int lt = hello_msg.link_code() & 0x03;
    Ce code applique un masque sélectif sur ton champ. En appliquant un filtre & 0x03, tu récupères les 2 bits de droite et le reste à 0. Donc ton LinkType.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ny = hello_msg.link_code() >> 2;
    Ce code décale ton ensemble de bits ( ton champ ) de 2 bits vers la droite. Les 2 bits tout à droite disparaisse et ton Neighbor Type ce retrouve dans les 2 dernier bits du champ. Après ça, en appliquant le premier code tu retrouveras ton Neighbor Type si jamais tu as besoin de supprimer les bits de gauche qui peuvent peut-être ne pas être toujours à 0.
    Homer J. Simpson


  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par yassinegoth Voir le message
    Bonjour

    Dans un programme je suis amené à échanger des paquets en réseau entre deux pc. J'ai un champ en particulier auquel je dois accéder en lecture/écriture. Le champ est composé de 8bits et divisé en deux parties:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              7       6       5       4       3       2       1       0
          +-------+-------+-------+-------+-------+-------+-------+-------+
          |   0   |   0   |   0   |   0   | Neighbor Type |   Link Type   |
          +-------+-------+-------+-------+-------+-------+-------+-------+
    J'ai pu avoir un exemple sur le net qui propose de faire pour la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	       int lt = hello_msg.link_code() & 0x03;
    		int nt = hello_msg.link_code() >> 2;
     
                 // link_code fonction qui revoir tout le champs 
                 //lt=link type
               // nt neibghbor type
    j'ignore à quoi sert le "0x03" et ">>2"

    merci pour votre aide
    >>, &, |, ^, << sont des opérateurs qui fonctionnent sur des bits. >> et << effectue des décalage de bits, tandis que &, | et ^ permettent l'exécution d'opérations bit à bit.

    >> N = décalage à droite de N bits
    << N = décalage à gauche de N bits
    a & b = a AND b
    a | b = a OR b
    a ^ b = a XOR b

    Les tokens commençant par 0x sont des nombres hexadécimaux (base 16: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

    Donc, pour reprendre ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int lt = hello_msg.link_code() & 0x03;
    lt reçoit les 2 bits de poids faible de hello_msg.link_code(), donc le link_type d'après ton diagramme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int nt = hello_msg.link_code() >> 2;
    nt reçoit une valeur composée des bits de hello_msg.link_code() décalés de 2 positions vers la droite (le bit 2 devient le bit 0, etc; les bits de poids fort sont, dans ce cas, mis à 0).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Je vais rajouté une explication qui te fera peut-être comprendre quelque chose qui est beaucoup utilisé avec l'API Win32.
    Tu créer un ensemble de paramètre dans une variable avec le signe | ( ou bit à bit ).
    On le rencontre par exemple dans la création de fenêtre, ou l'on peut en une seul variable demander d'appliqué plusieurs style dans la fenêtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WS_HREDRAW | WS_VREDRAW
    (ou quelque chose comme ça) Imagine que WS_HREDRAW est le code suivant : 0x00000001
    et WS_VREDRAW est le code suivant : 0x00000010

    En applicant "ou bit à bit", tu créer la variable : 0x00000011

    Pour récupérer la liste des paramètres, tu passes le champ dans un son filtre opposé le "et bit à bit " &.

    Donc pour savoir si le style WS_HREDRAW est présent, on applique le filtre de récupération.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      0x00000011
    & 0x00000001
    --------------
    0x00000001
    Si tu retrouves le même code que WS_HREDRAW alors c'est que le style est présent. Sinon c'est qu'il n'est pas demandée. C'est le principe utilisé dans ta première ligne de code.
    Homer J. Simpson


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut
    donc si j'ai bien compris pour récuperer une valeur d'un champ on applique un masque convenable, si je veux ecrire dans le champ "Neighbor Type" on fait comment puis la valuer à mettre ca serait en binaire ou décimale ?

    merci

  6. #6
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    la valuer à mettre ca serait en binaire ou décimale ?
    Peut importe, elle ne devra simplement pas dépasser la taille du champ que tu lui donne, ici 2 bits. ce qui te donne le choix entre la valeur 0, 1, 2, ou 3 en décimal. Tu peux le mettre sous plusieurs forme mais la plus courante reste directement l'hexadécimal avec une énumération.

    Pour le remplir tu dois procéder selon toi de gauche à droite ou de droite à gauche?
    Je t'aide en te disant que tu peux déplacer les bits de champ vers la gauche "<<" ou vers la droite ">>".
    Homer J. Simpson


  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut
    merci bien astraya je t offrirai une bière sur st cathrine si tu veux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accéder aux champs d'une ListControl
    Par Khaoula.85 dans le forum MFC
    Réponses: 0
    Dernier message: 07/12/2009, 17h45
  2. Accéder aux champs d'un objet à l'aide d'une liste
    Par lia dans le forum Général Python
    Réponses: 2
    Dernier message: 19/01/2009, 15h12
  3. Accéder aux champs d'une fenêtre d'un autre logiciel
    Par Melodie dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/03/2008, 09h15
  4. accéder aux champs contenus dans une iFrame
    Par toome dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/01/2008, 19h45
  5. Problème pour accéder aux champs d'un Item
    Par pcr92 dans le forum SharePoint
    Réponses: 3
    Dernier message: 16/10/2007, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo