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 ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  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 469
    Points
    12 469
    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 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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)
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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