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

Langage Perl Discussion :

[langage] opérateur d'affectation binaires


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [langage] opérateur d'affectation binaires
    bonjour,

    Je cherche à comprendre un code écrit en PERL. Dans ce code, on doit récupérer des adresses MAC et les tester (validité de la variable)

    Das une des fonctions ecrites, je vois marqué ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $val &= 0xffffff;
    $val |= 0xcc000000;
    my $hex = "000F".sprintf("%X", $val);
    Je n'arrive pas à comprendre ce que fait ce code là, et j'ai beau chercher sur le site, je n'ai pas trouvé de réponse à ma question:

    Qu'est ce que ca fait ce bout de code ?


    Si vous avez des pistes, je suis preneur...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    ca equivaut à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $val = $val & 0xffffff;
    $val = $val | 0xcc000000;
    tout comme $a += 10 equivaut à $a = $a + 10

    ensuite pour le sprintf il faut regarder la doc: google "perldoc sprintf"
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  3. #3
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Pour comprendre ce que ça fait, dis toi que tu peux réunir toutes les valeurs hexa par paquets de 2 caractères. De plus, il faut savoir qu'on travaille généralement sur 32 bits soit 4 octets, soit 8 caractères hexa (4 x 2 chars).

    pour savoir à quelle valeur ça correspond en binaire, tu peux utiliser la calculatrice windows, tu te mets en mode hex, tu tapes FF, et tu cliques sur bin, ca va te donner 11111111.

    du coup, le code $val &= 0xffffff; va appliquer l'opérateur AND aux 3 derniers octets de $val, avec le masque 11111111 11111111 11111111. Remarque qu'il n'y a ici que 3 paires de caractères hexa, ce qui veut dire aussi que tous les autres octets se verront appliquer le masque "AND 00", soit "AND 00000000", et vont donc disparaitre. ($val est sur 4 octets, le masque sera en réalité 00000000 11111111 11111111 11111111). Pour faire simple, ca ne va conserver que les 3 derniers octets de $val, ou plutot mettre le 1° octet à 0...

    Ensuite, le code $val |= 0xcc000000; va appliquer l'opérateur OR avec le masque CC000000, soit 11001100 00000000 00000000 00000000. appliquer un masque "x OR 00000000" va donner la valeur x sans changement. Comme on a éliminé le 1° octet avec le masque AND, le masque "OR CC" va reconstruire le 1° octet, avec la valeur 11001100, soit 204.

    Autrement dit, si tu avais une valeur 0xC537281E soit 197.55.40.30
    => le 1° masque va te donner 00.55.40.30 (0x0037281E)
    => le 2° masque va te donner 204.55.40.30. (0xCC37281E)

    enfin, le dernier code my $hex = "000F".sprintf("%X", $val); va ajouter la chaine 000F au début, et convertir la valeur en hexa. Autrement dit, dans l'exemple, ca va donner 000FCC37281E

    (0x37 = 55, 0x28 = 40, 0x1E = 30)

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  4. #4
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Si tu veux le même code sans opérations binaires, ce serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $hex = '000FCC' . substr(sprintf("%X", $val), 2, 6);
    (on prend la valeur hexa de val, on retire les 2 premiers caractères, on les remplace par CC, et on colle 00FF devant)

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci beaucoup à tous les 3!! ca m'a fait bien avancer...
    Et j'ai pu enfin comprendre comment ca fonctionnait !! ce qui est essentiel pour avancer et/ou débugger par la suite...

    Merci encore

    Bonne soirée

  6. #6
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par biglebowski13
    merci beaucoup à tous les 3 !!
    Héhé en fait on était que 2, j'ai juste posté 2 messages

    bonne soirée !

    N'oublie pas,

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    oué.. mais bon.. ca comptait bien pour 2 pour le coup !!

    Explication nickelle... ca vaut bien ca !!

    bonne journée

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

Discussions similaires

  1. Surcharge de l'opérateur d'affectation
    Par PoZZyX dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/07/2012, 15h30
  2. Surcharge de l'opérateur d'affection
    Par ProgVal dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2008, 16h45
  3. opérateur d'affectation vector incomplet ?
    Par sebkramm dans le forum SL & STL
    Réponses: 5
    Dernier message: 26/11/2007, 11h13
  4. Opérateurs d 'affectation élargie
    Par SPACHFR dans le forum Débuter
    Réponses: 7
    Dernier message: 06/09/2007, 12h10
  5. Classe Interface et Opérateur d'affectation!
    Par Rodrigue dans le forum C++
    Réponses: 6
    Dernier message: 07/02/2007, 14h45

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