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 :

Affichage d'un char en hexa avec printf ou echo


Sujet :

Shell et commandes GNU

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut Affichage d'un char en hexa avec printf ou echo
    Bonjour,
    Pour afficher la lettre G:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf '\x47\n'
    echo $'\x47'
    Par contre, si je veux afficher è (code hexa: E8)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf '\xE8\n'
    echo $'\xE8'
    J'obtient un magnifique �
    Y a t'il moyen de spécifier au shell (bash ici) d'utiliser le code ASCII étendu et comment ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    moi aussi.

    par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "è" | od -x
    000000    a8c3   000a
    000003
    donc, je teste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo $'\xc3\xa8'
    è
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 748
    Par défaut
    Il faut regarder les tables de caractères (ou utiliser des outils ... comme celui en ligne hapax.qc.ca)

    Le caractère è a comme code
    • UTF-8 : C3A8 (la réponse de @N_BaH)
    • UTF-16 : 00E8 (ta réponse)


    Donc, voila, ta console n'affiche pas d'UTF-16, mais de l'UTF-8

    Édit : Le code point du caractère est U+00E8 (binaire: 1110 1000). Comme il est compris entre U+0080 et U+07FF, en UTF-8, il va être codé ainsi en binaire : 110xxxxx 10yyyyyy (donc avec xxxxx: 00011 et yyyyyy: 101000)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Merci pour les réponses.
    L'affichage est correct avec \ue8 ou \Ue8.
    Je vais regarder ça plus en détail.
    Citation Envoyé par N_BaH Voir le message
    Attention aux neurones qui s'emmèlent.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    sur ce coup là j'ai fait attention : on a déjà vu que l'ordre des octets retournés par od est, par défaut, inversé sur nos systèmes (question d'endianness).
    od écrit a8c3,
    mais il faut lire c3a8
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 748
    Par défaut
    Citation Envoyé par ctac_ Voir le message
    Je vais regarder ça plus en détail.
    Regarde ici : les caractères d'échappement

    En gros :
    • \nnnn, pour les nombres octaux
    • \xhh, pour les nombres hexadécimaux à 1 octet
    • \uhhhh, pour les nombres hexadécimaux à 2 octets - les code points Unicode en dessous de 0x10000
    • \Uhhhhhhhh, pour les nombres hexadécimaux à 4 octets

    Donc, la commande echo doit faire la conversion vers UTF-8, parce que tu lui donnes 1 code point

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    @N_BaH
    Il manque le x avant le a.
    j'obtiens �8
    j'obtiens è
    Cordialement.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Citation Envoyé par ctac_
    Il manque le x avant le a.
    pas du tout.
    regarde bien, j'ai corrigé.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    sur ce coup là j'ai fait attention : on a déjà vu que l'ordre des octets retournés par od est, par défaut, inversé sur nos systèmes (question d'endianness).
    od écrit a8c3,
    mais il faut lire c3a8
    Oui, vaut mieux donc dire à od de le faire par octet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo è | od -t x1
    0000000 c3 a8 0a
    0000003

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    Si le code Unicode et le code hexadécimal était le même, ce serait trop simple.
    Voici un lien (clic ici) que j'aime bien pour avoir le détail. Particulièrement le tableau du milieu pour passer de l'un à l'autre.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2011, 13h07
  2. [NASM / Linux][Débutant] Segmentation fault affichage avec printf
    Par donkeyquote dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/11/2008, 19h00
  3. la précision d'affichage avec printf
    Par mony84 dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 13/09/2008, 00h29
  4. [Débutant] pb affichage du "\" avec printf
    Par jocelyn54 dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 24/01/2008, 11h02
  5. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 18h30

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