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

Shell et commandes GNU Discussion :

Améliorer un if then + convertir un hexa en nombre


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Améliorer un if then + convertir un hexa en nombre
    1) Améliorer un if then :

    Actuellement j'ai quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $1 == 1 ] || [ $1 == 12 ]
    then
    echo $1
    fi
    Cependant il y a beaucoup plus de condition (une vingtaine).
    Est-ce qu'il n'y a pas plus simple? J'avais pensé à un grep mais un "grep 2 $liste" ne marcherais pas ...

    2) convertir un hexa en nombre
    tmp contient la lettre E = 45 en hexa.
    45 en hexa = 69 en décimal, c'est ce dernier nombre que je souhaite récupérer.

    Pour l'instant je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat tmp | od -N 1 -i | head -1 | tr -s " " | cut -d " " -f 2
    Est-ce qu'il n'y a pas plus simple ?

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par Beginner.j Voir le message
    1) Améliorer un if then :

    Actuellement j'ai quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $1 == 1 ] || [ $1 == 12 ]
    then
    echo $1
    fi
    Cependant il y a beaucoup plus de condition (une vingtaine).
    Est-ce qu'il n'y a pas plus simple? J'avais pensé à un grep mais un "grep 2 $liste" ne marcherais pas ...
    Il y a peut-etre mieux, peut-etre pas, mais il faut nous expliquer ce que tu veux faire : c'est quoi $liste, quel est le rapport avec les valeurs 1 et 12 que tu testes, ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Il y a peut-etre mieux, peut-etre pas, mais il faut nous expliquer ce que tu veux faire : c'est quoi $liste, quel est le rapport avec les valeurs 1 et 12 que tu testes, ...
    Je pensais à un truc comme ça mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ liste="1 12"
    $ echo $liste | grep 2
    1 12
    Citation Envoyé par jack-ft Voir le message
    ...
    ou bien avec un case, qui montre explicitement les valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case "$1" in
       24|124|1124|34|134) echo $1 ;;
    esac
    Impeccable, je n'avais pas pensé à un "|" dans un case ...

    Citation Envoyé par jack-ft Voir le message
    Tu veux dire que tu veux convertir E (contenu du fichier 'tmp') en 69, c'est bien ça?
    Oui c'est bien ça.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Alors, je ne vois qu'une solution (évidente):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat tmp
    E
     
    $ printf "%u" "'$(cat tmp)"
    69

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Alors, je ne vois qu'une solution (évidente):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat tmp
    E
     
    $ printf "%u" "'$(cat tmp)"
    69
    Je savais bien que quelqu'un aurait une bonne idée, merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Alors, je ne vois qu'une solution (évidente):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat tmp
    E
     
    $ printf "%u" "'$(cat tmp)"
    69
    Bizarre, pour les caractère hexa 00 à 09 ça fonctionne bien.
    0a bug, cela donne 0
    0b et les suivants fonctionnent à nouveau
    Et à partir de 80 ça donne à chaque fois 0
    Je n'y comprend rien

    Une idée d'où viens ce problème?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ancienne version:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat tmp | od -N 1 -i | head -1 | tr -s " " | cut -d " " -f 2
    Finalement j'ai trouvé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat tmp | od -An -i
              69
    $ cat tmp | od -An -tx1
     45
    Le 1er donne le nombre en décimal et le 2ème en hexadécimal.
    Bien qu'il y ai des espaces lors de l'affichage standard ça a l'air de marcher quand je l'affecte à des variables.

    Je ne sais plus où j'avais trouvé ça (ça date).
    Qui pourrait me donner une explication sur ces 2 points:
    - l’affectation dans une variable enlève les espace?
    - Dans le 2ème od, le "tx1" correspond à quel type d'hexadécimal? J'ai vu que le -x correspondait à -tx2 = "hexadecimal shorts". Mais là je suis perdu ...
    Merci d'avance.

    En tout cas ça fonctionne avec le 0a et les caractères 80+ donc je suis content

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Beginner.j Voir le message
    1) Améliorer un if then :

    Actuellement j'ai quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $1 == 1 ] || [ $1 == 12 ]
    then
    echo $1
    fi
    Cependant il y a beaucoup plus de condition (une vingtaine).
    Est-ce qu'il n'y a pas plus simple? J'avais pensé à un grep mais un "grep 2 $liste" ne marcherais pas ...
    Tu peux faire la comparaison avec une expression régulière ou une expression générique.

    Expression régulière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if echo "$1" | egrep -q -x '1*[23]\(4\|56\|789\)' ; then
    echo $1
    fi
    qui matche 24 124 11124 34 134 11134 256 1256 111256 etc.

    Expression générique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [[ "$1" = '*(1)[23]@(4|56|789)' ]] ; then
    echo $1
    fi
    qui matche la même chose (avec une syntaxe légèrement différente).
    ou bien avec un case, qui montre explicitement les valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case "$1" in
       24|124|1124|34|134) echo $1 ;;
    esac


    2) convertir un hexa en nombre
    tmp contient la lettre E = 45 en hexa.
    45 en hexa = 69 en décimal, c'est ce dernier nombre que je souhaite récupérer.

    Pour l'instant je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat tmp | od -N 1 -i | head -1 | tr -s " " | cut -d " " -f 2
    Est-ce qu'il n'y a pas plus simple ?
    Tu veux dire que tu veux convertir E (contenu du fichier 'tmp') en 69, c'est bien ça?

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

Discussions similaires

  1. existe t il une fonction pour convertir les %hexa
    Par jean-michel-78 dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2011, 09h26
  2. Réponses: 2
    Dernier message: 23/12/2009, 20h46
  3. [XSL --> HTML>Convertir code HEXA en caractère
    Par portu dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 23/04/2009, 11h26
  4. convertir couleur hexa en tcolor
    Par gregcat dans le forum Delphi
    Réponses: 2
    Dernier message: 30/01/2007, 11h51
  5. [MFC] convertir ascii->hexa
    Par r0d dans le forum MFC
    Réponses: 12
    Dernier message: 30/03/2005, 11h53

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