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

Programmation et administration système Perl Discussion :

traitement d'un flux massif en hexa avec des opérateurs logique


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut traitement d'un flux massif en hexa avec des opérateurs logique
    Bonjour,

    J'ai 2 flux, de même taille, ouverts en hexadécimal.
    Par exemple $A=10EF332001 et $B=BFF9877600
    J'utilise pack 'H*', ça fonctionne bien.


    Je fais une opération logique (des ET des OU des XOR ça dépend)
    $A &= $B;

    Je veux faire une boucle est récupérer la valeur de gauche avec un décalage <<4 par exemple
    Ainsi si $A=FA6653EF1F00 je dois avoir 0xF, puis 0xA puis 0x6 etc...
    Je ne souhaite pas utiliser de tableau tout en retournant la position exemple en position 6 car je cherche 0x3


    Ces flux peuvent atteindre 1 Méga. Il s'agit de mesurer des dégradations .
    Du coup je vise la rapidité

    Peu-être que le décalage logique n'as pas d'intérêt ?
    Merci de votre proposition

    mimile

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je n'ai absolument rien compris :
    - qu'est qu'un flux (au sens perl)
    - $A et $B, tels que présentés ici, on ne sait pas s'ils contiennent du texte (valeur hexadécimal codée en ASCII) ou une valeur numérique
    - pourquoi cette restriction de ne pas utiliser de tableau ?
    - pourquoi vouloir faire ces opérations logiques sur des digits hexadécimaux et pas sur la valeur numérique complète de $A et $B ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    J'ai un peu simplifié, les variables sont bien le résultat d'une lecture dont le fichier est généré avec pack 'h*' binmode.

    Je cherche à éviter de faire un tableau pour des problèmes de performance. Je me suis dit qu'avec un mécanisme de décalage logique je pouvais traiter octet par octet.

    Mais du coup est-ce que je peux récupérer l'octet directement dans le fichier et "balayer" ce fichier ?

    mimile

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Tes nombres hexa sont en fait, semble-t-il, des chaînes ASCII contenant des caractères 0..9 et A..F.

    Pour récupérer le sixième octet, pourquoi ne pas utiliser la fonction substr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $A = "10EF332001";
    print substr $A, 5, 1;  # imprime 3
    Ou ai-je mal compris la nature réelle de tes données?

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    je pense que perso je ferais un truc dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (read (truc, $machin, 2) and read (bouzin, $bidule, 2)) {
        $coincoin .= uc(unpack("H2", chr((ord(pack("H*", $machin)) ^ ord(pack("H*", $bidule))))));
    }
    enfin je m'comprends moi même, c'est le plus important

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Avoir un apriori sur la performance de traitement des tableaux ne me semble pas une bonne idée, surtout concernant perl.
    Cela dit, pourrais-tu donner un extrait de ton code pour mieux comprendre ?
    Et pourquoi l'idée de travailler la logique sur des valeurs numériques (0x10EF332001 pour $A par exemple) plutôt que sur des chaines hexadécimales traitées octet par octet (d'abord 0x10, puis 0xEF, puis 0x33, ...) ne serait pas bonne ? (perl peut travailler en entier de 64 bits)

Discussions similaires

  1. Google en discussion avec des opérateurs mobiles
    Par Michael Guilloux dans le forum Actualités
    Réponses: 8
    Dernier message: 23/04/2015, 21h49
  2. Réaliser des circuits avec des portes logiques
    Par Drolls dans le forum Embarqué
    Réponses: 4
    Dernier message: 18/04/2014, 22h37
  3. [XL-2010] Problème de structure avec des opérateurs logiques
    Par Tiviia dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/02/2013, 10h36
  4. [XL-2010] Problème de structure avec des opérateurs logiques
    Par Tiviia dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2013, 15h13
  5. [XML] [EXPAT] traitement d'un flux de donnée xml contenant des \n
    Par firejocker dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/02/2006, 16h49

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