[python]transformer une ip hex en decimal [résolu]

transformer une ip hex en decimal [résolu] [python] - Python - Programmation

Marsh Posté le 18-01-2009 à 18:26:42    

Bonjour,
 
Débutant en python en particulier et en prog en général, vous allez peut être vous crevez les yeux apres avoir vu ce code  [:thesphinx]  
 je souhaite convertir une ip hexadécimal en ip décimal puis la réinjecter dans un fichier.
Pour ce faire, j'ai écris une définition qui permet de faire cela. Malheureusement, je n'arrive pas a introduire les . entre les différents nombres composant l'adresse ip, aussi je me demande si ce n'est pas ma fonction qui est en cause.
 

Code :
  1. ######### definition hex
  2. ip=[]
  3. def hex2dec(s):
  4.    """donne la valeur décimal d'une chaîne hexadécimal s"""
  5.    n=int(s,16)
  6.    ip.append(n)
  7. #########prog
  8. hexa='C0:A8:01:01'
  9. lhexa = hexa.split(':')
  10. c = len(lhexa)
  11. while x < c :
  12.    hex2dec(lhexa[x])
  13.    x= x+1
  14.    print ip[0],ip[1],ip[2],ip[3]


 
je récupère un résultat comme celui ci: 192 168 1 1
en fait, je voudrais 192.168.1.1 Et je ne sais pas vraiment comment faire. le mieux que j'ai réussi a obtenir est un 192 .168 .1 .1 Mon idée d'utiliser une liste n'est peut être pas la bonne. Bref, je pars dans tout les sens sans vraiment obtenir de résultat probant.
Merci de vos pistes.

Message cité 1 fois
Message édité par macfennec le 20-01-2009 à 11:14:01
Reply

Marsh Posté le 18-01-2009 à 18:26:42   

Reply

Marsh Posté le 18-01-2009 à 18:33:56    

Code :
  1. '.'.join(str(int(h, 16)) for h in hex_ip.split(":" ))


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-01-2009 à 18:36:59    

macfennec a écrit :

Bonjour,

 

Débutant en python en particulier et en prog en général, vous allez peut être vous crevez les yeux apres avoir vu ce code  [:thesphinx]
 je souhaite convertir une ip hexadécimal en ip décimal puis la réinjecter dans un fichier.
Pour ce faire, j'ai écris une définition qui permet de faire cela. Malheureusement, je n'arrive pas a introduire les . entre les différents nombres composant l'adresse ip, aussi je me demande si ce n'est pas ma fonction qui est en cause.

 
Code :
  1. ######### definition hex
  2. ip=[]
  3. def hex2dec(s):
  4.    """donne la valeur décimal d'une chaîne hexadécimal s"""
  5.    n=int(s,16)
  6.    ip.append(n)
  7. #########prog
  8. hexa='C0:A8:01:01'
  9. lhexa = hexa.split(':')
  10. c = len(lhexa)
  11. while x < c :
  12.    hex2dec(lhexa[x])
  13.    x= x+1
  14.    print ip[0],ip[1],ip[2],ip[3]
 

je récupère un résultat comme celui ci: 192 168 1 1
en fait, je voudrais 192.168.1.1 Et je ne sais pas vraiment comment faire. le mieux que j'ai réussi a obtenir est un 192 .168 .1 .1 Mon idée d'utiliser une liste n'est peut être pas la bonne. Bref, je pars dans tout les sens sans vraiment obtenir de résultat probant.
Merci de vos pistes.


La solution "qui marche facile à comprendre, mais pas top classe" :

Code :
  1. print ip[0] + '.' + ip[1] + '.' + ip[2] + '.' +ip[3]
 

La solution "qui marche, classe, mais moins évidente" :

Code :
  1. print '.'.join(ip)
 

:jap:

Message cité 1 fois
Message édité par e_esprit le 18-01-2009 à 18:37:29

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 18-01-2009 à 18:38:29    

Merci à vous deux. Je tournais autour de la solution depuis 1h, sans la voir.
Encore merci :)

Reply

Marsh Posté le 18-01-2009 à 18:43:04    

e_esprit a écrit :


La solution "qui marche facile à comprendre, mais pas top classe" :

Code :
  1. print ip[0] + '.' + ip[1] + '.' + ip[2] + '.' +ip[3]


 
La solution "qui marche, classe, mais moins évidente" :

Code :
  1. print '.'.join(ip)


 
 :jap:


Tu peux pas join() sur une liste d'int, donc ton 2e truc ne va pas marcher (faut faire '.'.join(map(str, ip))) :o
 
Et t'façon faut jeter tout le reste du code :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-01-2009 à 18:48:16    

Oui, dans mes pérégrinations, je m'étais bien aperçu d'un problème de typage sans trouver la façon de le résoudre :)


Message édité par macfennec le 18-01-2009 à 18:48:34
Reply

Marsh Posté le 18-01-2009 à 20:18:30    

masklinn a écrit :


Tu peux pas join() sur une liste d'int, donc ton 2e truc ne va pas marcher (faut faire '.'.join(map(str, ip))) :o

 

Et t'façon faut jeter tout le reste du code :o


Il obtient des chaines avec son split, donc dans son code, c'est tout à fait fonctionnel [:cosmoschtroumpf]

 

Ah non, il fait un int() dans a fonction j'avais pas fais gaffe, au temps pour moi :o

Message cité 1 fois
Message édité par e_esprit le 18-01-2009 à 20:19:04

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 18-01-2009 à 20:24:54    

e_esprit a écrit :


Il obtient des chaines avec son split, donc dans son code, c'est tout à fait fonctionnel [:cosmoschtroumpf]
 
Ah non, il fait un int() dans a fonction j'avais pas fais gaffe, au temps pour moi :o


[:hahaguy]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed