Convertir “little endian” chaîne hexadécimale de l'adresse IP en Python
Quelle est la meilleure façon de transformer une chaîne de caractères dans le présent formulaire à une adresse IP: "0200A8C0"
. Les "octets" présents dans la chaîne sont dans l'ordre inverse, c'est à dire dans l'exemple donné de la chaîne devrait générer 192.168.0.2
.
OriginalL'auteur Matt Joiner | 2010-02-04
Vous devez vous connecter pour publier un commentaire.
Adresse réseau manipulation est fournie par le module socket.
Vous pouvez traduire votre chaîne hexadécimale à
packed ip
à l'aide destruct.pack()
et le little endian, unsigned long format.
Vous voulez "<I", pas de "L" comme premier argument de
pack
, bien que "<L" sera trop de travail. Sinon, vous laissez-vous ouvrir à ce que la plate-forme endianess est.exactement comment il est "long int"ness effet ici?
Menuisier, il n'a pas vraiment, au moins si vous n' "<L". Sinon, c'est de la plate-forme exactement comment grand "L" ou "je". J'ai tendance à utiliser la conceptuellement plus petit type qui fonctionne.
Édité pour "<L". Merci, @Omnifarious .
OriginalL'auteur gimel
C'est court et clair; l'envelopper dans une fonction de contrôle d'erreur pour l'adapter à vos besoins.
Portée de main les fonctions de regroupement:
zip(*[iter(s)]*2)
travail? Je suis très intéressé par ce que.C'est tout à fait le hack!
iter(s)
renvoie un itérateur sur la chaîne. En multipliant la liste de cet itérateur par 2 créer deux références de la même iterator.zip()
renvoie une liste de tuples contenant un élément de chacun de ses arguments. Depuis les deux arguments sont les mêmes itérateur, il faudra deux fois pour chaque tuple, de retour d'un n-uplet de chacun des 2 personnages adjacents. Je n'aurais jamais pensé à essayer quelque chose comme cela. 😀C'est le cœur de la plupart des "regroupement" des recettes que j'ai vu, et Max expliqué. Sera mise à jour pour inclure deux courts fonctions dans cette veine.
merci beaucoup, j'espérais une solution comme la vôtre serait venu.
J'ai créé une nouvelle question, qui demande directement ce que vous avez résolu ici: stackoverflow.com/questions/2202461/...
OriginalL'auteur
Vous pourriez faire quelque chose comme ceci:
L'octet de fractionnement pourrait être fait de manière plus élégante, mais je ne peux pas penser à un moyen plus simple sur le dessus de ma tête.
EDIT: Ou sur une seule ligne:
Roger de la réponse contient une façon très intrigante pour ce faire.
OriginalL'auteur Max Shawabkeh
Ma essayer:
OriginalL'auteur Alok Singhal