2011-09-29 22 views
6

Sto riscontrando qualche difficoltà nel cambiare un esadecimale in un int/char (char preferibilmente). Tramite il sito web; http://home2.paulschou.net/tools/xlate/ Inserisco l'esagono di C0A80026 nella casella esadecimale, nella casella DEC/CHAR restituisce correttamente l'IP che mi aspettavo che contenesse.Python - Conversione di esadecimale in INT/CHAR

Questi dati vengono estratti da un database esterno e non sono a conoscenza di come viene salvato, quindi tutto ciò di cui ho bisogno è la stringa esadecimale.

Ho provato a utilizzare la funzione binascii.unhexlify per vedere se potevo decodificarlo ma temo di non avere una comprensione abbastanza buona di hex per apprezzare ciò che sto facendo.

Anche il tentativo di stampare utilizzando solo un cast di int() non ha prodotto i risultati richiesti. Ho bisogno di un modo per convertire da quella stringa esadecimale (o una simile) all'IP originale.

AGGIORNAMENTO: Per chi si imbatte in questo in futuro ho modificato leggermente la risposta di seguito per fornire una stampa esatta come IP utilizzando;

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

possibile duplicato del [stringa esadecimale Convertire in int in Python] (http://stackoverflow.com/questions/ 209513/convert-hex-string-to-int-in-python) –

+0

Questa soluzione non funziona con il mio problema – Draineh

+0

Si prega di spiegare esattamente come la domanda di duplicazione non è un duplicato. I dettagli contano. "non funziona con il mio problema" è troppo vago per significare qualsiasi cosa. –

risposta

6

Se si desidera ottenere 4 numeri separati da questo, poi trattarlo come 4 numeri separati. Non è necessario 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] 

Questo può essere generalizzato, ma lo lascerò come esercizio per voi.

+0

Perfetto, grazie – Draineh

0

Spero che sia quello che ci si aspetta:

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

letterale '0x4242422' crea già un numero intero,' int (hex_val) 'è ridondante. –

4

potrebbe anche essere necessario la funzione chr:

chr(65) => 'A' 
+0

chr accetta solo interi la domanda indica chiaramente che l'utente ha bisogno di convertire un hex in un int/char (non un int in char) e chr accetta solo numeri interi quindi questa non è una soluzione. –

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

Un modo semplice

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

, se si preferisce list comprehension

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

Bello.Lo scriverei _personalmente come una lista di comprensione, ma è puramente gusto. Mi piace l'uso di 'decode' e' ord'. – neil

+0

grazie a @neil. Mi piace anche la comprensione delle liste. –

Problemi correlati