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

Python Discussion :

entier vers hexa dans une string


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut entier vers hexa dans une string
    Bonjour,

    Je voudrais afficher une chaîne de caractères ascii.
    Il est facile le faire en dur: print "\x61\x62\x63\x64" => ABCD

    Maintenant voila ce que je voudrais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def foo ( strnum ):
        num = int ( strnum )
        str = [ ] 
        for i in range (num):
            str.append ( untrucàfaire (num) )
        print num
    Le résultat dans le shell: plein de caractères (la plupart non affichables)

    Merci pour votre aide!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Pourquoi ne pas faire simplement?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> s = "\x61\x62\x63\x64"
    >>> print (s)
    abcd
    >>> s[0]
    'a'
    \x<nn> c'est le même "entier" que 'a', la différence est dans la représentation - comment l'afficher...

    Si le sujet est de convertir des nombres écrits en hexa en int puis de les ressortir en hexadécimal, vous avez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> hex(int("\x61\x62\x63\x64", 16))
    '0xabcd'
    Mais je dois avouer que ce que vous voulez faire n'est pas très clair - pour moi! -.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ce n'est pas ce que je veux.
    Par ailleurs j'ai avancé, la fonction suivante ressemble plus à ce que je veux.
    Cela dit, des caractères manquent chez moi, notamment a partir de la lettre d


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import sys
     
    def foo(strnum):
        i = 0
        length = len (strnum)
        str = []
        while i < length:
            str.append (chr(int(strnum[i:i+2])))
            i = i+2
        return "".join(str)
     
    if __name__ == "__main__":
        print foo (sys.argv[1]),
    Je le lance avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (( i<256 )); do python /tmp/toto.py $i; (( i+=1 )); done
    Je ne vois pas vraiment pourquoi

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Donnez un exemple de ce que vous avez en entrée et de ce que vous voulez en sortie: cela aiderait à comprendre ce que vous voulez faire.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Je ne comprends pas non plus le but de la manœuvre, mais votre code bash actuel revient à appeler successivement foo() avec comme paramètre "0", "1", "2", "3", …, "254", "255" (en assumant que $i est initialisé à zéro…).

    Dans ce cas, pourquoi diable se compliquer la vie dans foo*? Normal qu’elle s’arrête au 'd', ord('d') = 100, or vous ne prenez jamais plus de deux chiffres (strnum[i:i+2])*! Un peu de logique et de simplicité, que diable*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import sys
     
    def foo(strnum):
        return chr(int(strnum))
     
    if __name__ == "__main__":
        print foo (sys.argv[1]),
    Sinon, expliquez plus clairement votre but, et donnez un exemple de données d’entrée à foo(), et de résultat attendu, comme demandé par wiztricks.

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Le résultat dans le shell: plein de caractères (la plupart non affichables)
    C'est étonnant votre fonction retourne un nombre.

    Dans votre fonction de référence, str (au passage c'est pas conseillé de l'appeler comme cela) n'est pas utilisé.

    Cette fonction est-elle de vous? Si non, pouvez-vous donner le lien où vous l'avez trouvé?

    Si oui, comme le disent les autres membres du forum, il serait souhaitable de nous donner un exemple d'entrée sortie.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    C'est étonnant votre fonction retourne un nombre.
    la fonction retournant:
    Je dirais "engage your brain before posting a comment".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    A mon avis, il y a confusion des genres :
    \x61\x62\x63\x64, ce sont des caractères hexadécimaux.
    Or tu appelles ta fonction en lui passant un entier.
    Si tu veux l'afficher en ASCII, il suffit de le convertir par chr() :

    >>> for value in range(32, 48):
    ... print value, chr(value), hex(value)
    ...
    32 0x20
    33 ! 0x21
    34 " 0x22
    35 # 0x23
    36 $ 0x24
    37 % 0x25
    38 & 0x26
    39 ' 0x27
    ...


    Pierre.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Citation Envoyé par wiztricks
    la fonction retournant:
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    Je dirais "engage your brain before posting a comment".
    Non je parle de cette fonction

    Citation Envoyé par maxhasard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def foo ( strnum ):
        num = int ( strnum )
        str = [ ] 
        for i in range (num):
            str.append ( untrucàfaire (num) )
        print num
    Citation Envoyé par "wiztricks
    Je dirais "engage your brain before posting a comment".
    je pense que ce commentaire n'était pas très utile, mais ouvert à tous
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    Je voudrais créer un dictionnaire qui à une clé associe une certaine valeur que je m'en vais vous expliquer.

    La clé est une string parce que je commande depuis bash.
    Ici j'ai mis de 0 à 255.
    Le premier traitement est de convertir la valeur cle sur un octet.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
           cle     |    hexa/int  |  conversion(cle)
         __________________________________________
            "1"            0x31            = "\x01"
            "101"        0x65           E = "\x65"
            "49"          0x49           I   = "\x49"
    Puis ensuite (mais cette partie n'est en rapport direct ici), j'applique une fonction
    sur la valeur conversion(cle).

    Pour les conseils,

    fred1599, oui, c'est str qu'il faut afficher.

    merci mont29, c'est le problème en effet, surtout que je
    ne connais pas la taille de la chaîne clé à l'avance. En réalité, ma clé
    peut prendre des valeurs bien superieures à 255 d'où le vilain effet de bord.
    A cause du int, conversion(clé) ne peut dépasser 4 octets j'imagine, donc j'ai bouclé sur ton code (octet après octet) pour obtenir une conversion de taille arbitraire.

    Repié01, j'espère avoir bien expliqué cette fois
    Dernière modification par Invité ; 15/07/2012 à 12h13.

  11. #11
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    En fait, un int python n’est pas un int C, sa taille est arbitraire (il peut être aussi grand que nécessaire, ça alourdit simplement les calculs…).

    Par contre, chr(), lui, verra rouge au-delà de 1114112, qui semble être le code UNICODE le plus haut actuellement*!

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

Discussions similaires

  1. Les espaces dans une String vers une <TextArea>
    Par loopx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 21/03/2008, 14h37
  2. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31
  3. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 11h54
  4. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/09/2004, 21h44
  5. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26

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