2011-09-29 6 views
6

J'ai quelques difficultés à changer un hexagone en un int/char (char de préférence). Via le site Web http://home2.paulschou.net/tools/xlate/ Je rentre l'hexagone de C0A80026 dans la boîte hexadécimale, dans la boîte DEC/CHAR il sort correctement l'adresse IP que je pensais qu'elle contiendrait.Python - Conversion de Hex en INT/CHAR

Ces données sont extraites d'une base de données externe et je ne sais pas comment elles sont enregistrées, donc tout ce que je dois travailler est la chaîne hexadécimale elle-même.

J'ai essayé d'utiliser la fonction binascii.unhexlify pour voir si je pouvais le décoder, mais je crains de ne pas avoir assez de compréhension de l'hexagone pour apprécier ce que je fais.

La tentative d'impression en utilisant uniquement une distribution int() n'a pas non plus produit les résultats requis. J'ai besoin d'un moyen de convertir à partir de cette chaîne hexadécimale (ou un similaire) à l'IP d'origine. MISE À JOUR: Pour toute personne rencontrant cela dans le futur, j'ai légèrement modifié la réponse ci-dessous pour fournir une impression exacte en IP en utilisant;

dec_output = str(int(hex_input[0:2], 16)) + "." + str(int(hex_input[2:4], 16)) + "." + str(int(hex_input[4:6], 16)) + "." + str(int(hex_input[6:8], 16)) 
+0

double possible [Convertir chaîne hexadécimale à int en Python] (http://stackoverflow.com/questions/ 209513/convertir-hex-chaîne-à-int-en-python) –

+0

Cette solution ne fonctionne pas avec mon problème – Draineh

+0

S'il vous plaît expliquer exactement comment la question de duplication n'est pas un doublon. Les détails comptent. "ne fonctionne pas avec mon problème" est trop vague pour signifier quoi que ce soit. –

Répondre

6

Si vous souhaitez obtenir 4 numéros séparés de cela, puis le traiter comme 4 numéros séparés. Vous n'avez pas besoin de binascii.

hex_input = 'C0A80026' 
dec_output = [ 
    int(hex_input[0:2], 16), int(hex_input[2:4], 16), 
    int(hex_input[4:6], 16), int(hex_input[6:8], 16), 
] 
print dec_output # [192, 168, 0, 38] 

Ceci peut être généralisé, mais je vais le laisser comme un exercice pour vous.

+0

Parfait, merci – Draineh

0

J'espère que c'est ce que vous attendez:

hex_val = 0x42424242  # hexadecimal value 
int_val = int(hex_val) # integer value 
str_val = str(int_val) # string representation of integer value 
+0

Le littéral '0x4242422' crée déjà un entier,' int (hex_val) 'est redondant. –

4

Vous pourriez aussi avoir besoin de la fonction chr:

chr(65) => 'A' 
+0

chr accepte uniquement les entiers la question indique clairement que l'utilisateur doit convertir un hex dans un int/char (pas un int en char) et chr accepte uniquement les entiers, ce n'est donc pas une solution. –

1
>>> htext='C0A80026' 
>>> [int(htext[i:i+2],16) for i in range(0,len(htext),2)] 
# [192, 168, 0, 38] 
6

Une façon simple

>>> s = 'C0A80026' 
>>> map(ord, s.decode('hex')) 
[192, 168, 0, 38] 
>>> 

si vous préférez la liste compréhensions

>>> [ord(c) for c in s.decode('hex')] 
[192, 168, 0, 38] 
>>> 
+0

Nice one.Je l'écrirais personnellement comme une compréhension de liste, mais c'est purement du goût. J'aime l'utilisation de 'decode' et' ord'. – neil

+0

merci @neil. J'aime les listes de compréhension, aussi. –