Transformer une adresse ip donnée en binaire avec python
Résolu/Fermé
Liloux
-
Modifié le 17 mars 2022 à 14:47
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 mars 2022 à 02:47
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 mars 2022 à 02:47
A voir également:
- Localiser adresse ip python
- Ethernet n'a pas de configuration ip valide - Guide
- Rechercher ou entrer l'adresse - Guide
- Comment connaître son adresse ip - Guide
- Darkino nouvelle adresse - Guide
- Localiser adresse ip gratuit - Guide
7 réponses
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
66
16 mars 2022 à 20:23
16 mars 2022 à 20:23
Bonjour,
A mon avis tu commence par séparer l'adresse 192.168 ... en un tableau de 4 trucs qui sont en 8bits
puis tu écris les 4 nombres les uns après les autres sans rien entre
Donc il te faut la fonction qui découpe avec un séparateur qui est le point "." et qui te sort les 4 nombres.
Puis un print avec un format binaire en 8 bits.
A mon avis il y a tout cela dans la doc python.
Fais y ton marché :)
https://overapi.com/python
Indices:
il existe les fonctions:
str.split()
int()
bin()
A mon avis tu commence par séparer l'adresse 192.168 ... en un tableau de 4 trucs qui sont en 8bits
puis tu écris les 4 nombres les uns après les autres sans rien entre
Donc il te faut la fonction qui découpe avec un séparateur qui est le point "." et qui te sort les 4 nombres.
Puis un print avec un format binaire en 8 bits.
A mon avis il y a tout cela dans la doc python.
Fais y ton marché :)
https://overapi.com/python
Indices:
il existe les fonctions:
str.split()
int()
bin()
yg_be
Messages postés
23349
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
Ambassadeur
1 554
16 mars 2022 à 19:54
16 mars 2022 à 19:54
Bonjour,
Je ne cherche pas la réponse juste de l'aide.
J'ai déjà commencé avec ça:
Sauf que si je le passe en
Je ne cherche pas la réponse juste de l'aide.
J'ai déjà commencé avec ça:
def convertir(T): """ T est un tableau d'entiers, dont les éléments sont 0 ou 1 et représentant un entier écrit en binaire. Renvoie l'entier positif dont la représentation binaire est donnée par le tableau T """ n = len(T) dec_int = 0 # Initialisation de l'entier decimal dont o a la représentation binaire for k in range(n): dec_int = dec_int + T[k] * 2 ** (n - 1 - k) return dec_int
Sauf que si je le passe en
strle calcul ne se fait pas et j'ai une erreur.
yg_be
Messages postés
23349
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
1 554
>
Liloux
16 mars 2022 à 20:20
16 mars 2022 à 20:20
bonjour,
peux-tu utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux-tu montrer comment tu appelles ta fonction?
ta fonction fonctionne bien?
peux-tu utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux-tu montrer comment tu appelles ta fonction?
ta fonction fonctionne bien?
Liloux
>
yg_be
Messages postés
23349
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
16 mars 2022 à 20:31
16 mars 2022 à 20:31
def convertir(T) """ T est un tableau d'entiers, dont les éléments sont 0 ou 1 et représentant un entier écrit en binaire. Renvoie l'entier positif dont la représentation binaire est donnée par le tableau T """ n = len(T) dec_int = 0 #initialisation de l'entier decimal dont o a la représentation binaire for k in range(n): dec_int=dec_int+T[k]*2**(n-1-k) return dec_int
Liloux
>
yg_be
Messages postés
23349
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
16 mars 2022 à 20:32
16 mars 2022 à 20:32
Ma fonction fonctionne bien mais je crois qu'elle ne m'aide pas du tout car elle transforme le binaire en décimal et il faut faire l'inverse.
De ce que j'ai compris il faut donc que je prenne ma donnée comme le '192', que ne la transforme en binaire en rajoutant des 0 si il le faut puis que je " colle" les données pour faire un long binaire correspondant à chaque parties
De ce que j'ai compris il faut donc que je prenne ma donnée comme le '192', que ne la transforme en binaire en rajoutant des 0 si il le faut puis que je " colle" les données pour faire un long binaire correspondant à chaque parties
yg_be
Messages postés
23349
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
1 554
>
Liloux
16 mars 2022 à 20:35
16 mars 2022 à 20:35
je pense aussi.
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
Modifié le 17 mars 2022 à 14:57
Modifié le 17 mars 2022 à 14:57
Bonjour,
Par rapport au message #4, quelques précisions.
Exemple :
Exemple :
Exemple :
Bonne chance
Par rapport au message #4, quelques précisions.
- Il faut en effet séparer ton adresse IPv4 en 4 entiers. Chacun de ces entiers vaut entre 0 et 255 et donc tient sur un octet (soit 4 entiers de 8 bits chacun, et donc une IPv4 correspond bien à 4 * 8 = 32 bits). Pour cela tu peux utiliser la méthode
split()
.
Exemple :
(x, y, z, t) = adresse_ip.split(".")
- Tu peux convertir une chaîne de caractère qui contient un entier (e.g.,
"192"
) en entier avec la fonctionint()
.
Exemple :
i = int("192")
- Pour chacun de ces 4 entiers, il tu peux le représenter sous forme binaire avec la fonction
bin()
. Exemple :bin(192)
. Mais tu verras que la chaîne retournée est préfixée par"0b"
. Si tu veux supprimer ce préfixe, il suffit de considérer la représentation binaire ainsi obtenue à partir du second caractère.
Exemple :
b = bin(192)[2:]
- En concaténant ces quatre chaînes tu obtiendras la représentation binaire de ton adresse IP.
Bonne chance
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
66
18 mars 2022 à 19:27
18 mars 2022 à 19:27
Alors , trouvé ? :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOui ! j'ai fait plusieurs fonctions pour ne pas avec ma fonction principale (ip_vers_ip_binaire(ip) ) trop grande
def decimal_en_binaire(a): """a est un entier positif en base 10 Renvoie sa valeur convertie en base 2 sous la forme d'une chaine de caractères """ bin_a = str(a%2) # Initialisation du mot binaire a = a // 2 while a!=0 : bin_a = str(a % 2) + bin_a a = a//2 return bin_a def ip_vers_liste(ip): """ip est une adresse ipv4 de type str Renvoie le tableau des octets (en décimal de type int) """ tab_str = ip.split('.') tab_int= [int(k) for k in tab_str] #création du tableau qui convertir tab_str(type str) en entier (type int) return tab_int def ip_vers_ip_binaire(ip): """ip est une adresse ipv4 de type str Renvoie l'ip en convertissant les octets en binaire et sans les points de séparation. L'ip renvoyée est de type str """ ip =ip_vers_liste(ip) #transformation d'une chaîne de caractères en liste n = len(ip) binn1='' # binn1 est une chaîne de caractères manque= '0' #manque sert à rajouter des 0 pour arriver à 8bits pour chacunes des 4 parties de l'IP binn= '0' for i in range(4): binn= decimal_en_binaire(ip[i]) if len(binn)!=8: binn = manque*(8-len(binn))+ binn binn1= binn1 + binn return binn1
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
66
20 mars 2022 à 10:04
20 mars 2022 à 10:04
Moi j'avais:
adresseIp = "192.168.0.1" # l'adresse qu'on veut traiter print(adresseIp) # juste pour debug def ipEnBinaire (adresseIp): toto = adresseIp.split('.') resultat = "" # init de resultat pour avoir format chaine for compteur in toto: #print(compteur) # juste pour debug resultat = resultat+format(int(compteur),'08b') print(resultat) return 0 #lance l'action ipEnBinaire(adresseIp)
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
Modifié le 21 mars 2022 à 10:16
Modifié le 21 mars 2022 à 10:16
Bonjour,
Tu peux faire plus court notamment en utilisant cette astuce :
Bonne chance
Tu peux faire plus court notamment en utilisant cette astuce :
def ip_vers_ip_binaire(ipv4): return "".join( "{0:08b}".format(int(n)) for n in ipv4.split(".") ) print(ip_vers_ip_binaire("192.168.0.1"))
Bonne chance
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
66
24 mars 2022 à 19:58
24 mars 2022 à 19:58
Bonjour mamie,
pouvez vous expliquer l'usage de FOR dans votre exemple. Je ne comprends pas ce que la partie dans le join i.e.:
fait devant le for.
Pour moi le for ne renvoie rien puisqu'il n'est suivi d'aucune instruction.
Et la doc python 3.10.3 indique §8.3 pour FOR:
"for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]"
il semble que le ":" ne soit pas facultatif donc déjà je ne comprends pas pour cela ne sort pas une erreur mais bon, admettons. Et on n'a rien pour suite donc pas d'action.
si on simplifie en
Ca fonctionne et sort 19216801 , logique.
Mais comment ? Pouvez vous expliquer ou renvoyer vers un § de la doc qui me permette de comprendre ?
Merci d'avance.
pouvez vous expliquer l'usage de FOR dans votre exemple. Je ne comprends pas ce que la partie dans le join i.e.:
"{0:08b}".format(int(n)) for n in ipv4.split(".")
fait devant le for.
Pour moi le for ne renvoie rien puisqu'il n'est suivi d'aucune instruction.
Et la doc python 3.10.3 indique §8.3 pour FOR:
"for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]"
il semble que le ":" ne soit pas facultatif donc déjà je ne comprends pas pour cela ne sort pas une erreur mais bon, admettons. Et on n'a rien pour suite donc pas d'action.
si on simplifie en
n for n in ipv4.split(".")
Ca fonctionne et sort 19216801 , logique.
Mais comment ? Pouvez vous expliquer ou renvoyer vers un § de la doc qui me permette de comprendre ?
Merci d'avance.
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
>
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
Modifié le 25 mars 2022 à 12:57
Modifié le 25 mars 2022 à 12:57
Bonjour magouero,
Ce qui te bloque c'est probablement que tu ne connais pas encore la syntaxe des boucles
Cette syntaxe s'applique pour une
En toute rigueur d'ailleurs, il s'agit plutôt de la syntaxe associée à un générateur qui est passé au constructeur
Dans la syntaxe que tu connais déjà, la fonction que j'ai indiquée se réécrit :
Bonne chance
Ce qui te bloque c'est probablement que tu ne connais pas encore la syntaxe des boucles
forutilisée dans les comprehensions de listes.
Cette syntaxe s'applique pour une
list, un
tuple, un
dict, un générateur.
En toute rigueur d'ailleurs, il s'agit plutôt de la syntaxe associée à un générateur qui est passé au constructeur
list, un
tuple,
dict.
Dans la syntaxe que tu connais déjà, la fonction que j'ai indiquée se réécrit :
def ip_vers_ip_binaire(ipv4): ma_liste = list() for n in ipv4.split("."): ma_liste.append("{0:08b}".format(int(n))) return "".join(ma_liste)
"{0:08b}".format(int(n))signifie "écrit l'entier
nau format binaire sur au plus 8 caractères en ajoutant les éventuels 0 à gauche manquants pour obtenir 8 caractères". Plus de détails, voir ce lien.
Bonne chance
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
66
>
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
25 mars 2022 à 19:43
25 mars 2022 à 19:43
ok je vois. Pour le format et le padding , je l'avais.
Mais punaise pour trouver ça dans la doc sans savoir comment ça s'appelle ...
Alors pour ceux qui liraient cette discussion:
regardez
https://docs.python.org/3/tutorial/controlflow.html
puis: "generator expression"
https://docs.python.org/3/glossary.html#term-generator
Pour les exemples et l'intérêt de la méthode, le lien "generateur" ci dessus est très bon.
Merci Mamiemando.
Mais punaise pour trouver ça dans la doc sans savoir comment ça s'appelle ...
Alors pour ceux qui liraient cette discussion:
regardez
https://docs.python.org/3/tutorial/controlflow.html
puis: "generator expression"
https://docs.python.org/3/glossary.html#term-generator
Pour les exemples et l'intérêt de la méthode, le lien "generateur" ci dessus est très bon.
Merci Mamiemando.
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
>
magouero
Messages postés
242
Date d'inscription
lundi 9 juillet 2007
Statut
Membre
Dernière intervention
2 avril 2022
28 mars 2022 à 02:47
28 mars 2022 à 02:47
Mais punaise pour trouver ça dans la doc sans savoir comment ça s'appelle ...
Oui, oui, je sais, mais tu vas me faire rougir :D Bon, en vrai je n'ai pas de mérite à part avoir su chercher correctement ;-)
Merci Mamiemando.
De rien, bonne continuation :-)
Oui, oui, je sais, mais tu vas me faire rougir :D Bon, en vrai je n'ai pas de mérite à part avoir su chercher correctement ;-)
Merci Mamiemando.
De rien, bonne continuation :-)
16 mars 2022 à 20:37
16 mars 2022 à 20:47
plutot que bin() il y a format(machin,truc)
16 mars 2022 à 20:52