HOWTO · Python
Converti stringa esadecimale in Int in Python
Dimostra come convertire esadecimali in interi in Python
In questa pagina
Usa int(value, 16) per convertire una stringa esadecimale in un intero in Python. Imposta la base su 0 quando vuoi che Python rilevi il prefisso 0x; usa int.from_bytes() quando l’input rappresenta byte e devi specificare l’ordine dei byte o la larghezza con segno.
Usa int() per convertire un valore esadecimale in un intero in Python
La funzione int() accetta una stringa e una base facoltativa. La base predefinita è 10, quindi per il testo esadecimale passa 16. In int(value, base), il secondo argomento indica la base della stringa di input, non la larghezza in bit. Sostituisci value con il testo esadecimale da analizzare.
Converti una stringa esadecimale senza prefisso in un intero in Python
Se le cifre esadecimali non hanno il prefisso 0x o 0X, specifica esplicitamente la base 16. È utile per i valori letti da file di testo, API o input dell’utente.
hex_string = "1a"
integer_value = int(hex_string, 16)
print(integer_value)
26
Il risultato è 26: la base 16 indica a int() di interpretare ogni cifra come esadecimale. Se la stringa include un prefisso, puoi usare la base 16 oppure lasciare che int() rilevi il prefisso, come vedrai nella sezione successiva.
Converti una stringa esadecimale con prefisso in un intero in Python
Per il testo esadecimale con prefisso, la base 0 indica a int() di dedurre la base da un prefisso riconosciuto, come 0x o 0X. Anche la base 16 accetta questi prefissi; la base 0 è utile quando l’input può contenere anche altri prefissi per interi riconosciuti da Python.
hex_string = "0x1a"
integer_value = int(hex_string, 0)
print(integer_value)
26
Poiché la stringa inizia con 0x, Python interpreta le cifre successive come esadecimali e restituisce 26. La base 0 richiede un prefisso riconosciuto: non interpreta automaticamente come esadecimale il testo privo di prefisso. Se l’input non ha il prefisso, usa la base 16.
Converti una stringa esadecimale in un intero secondo l’ordine little-endian o big-endian in Python
Gli ordini dei byte little-endian e big-endian descrivono come i byte di una sequenza corrispondono a un intero; il testo esadecimale, da solo, non ha un ordine dei byte predefinito. Per i byte ef be, l’ordine big-endian colloca ef per primo, mentre quello little-endian considera ef il byte meno significativo. Passa l’ordine desiderato a int.from_bytes():
data = bytes.fromhex("ef be")
big_value = int.from_bytes(data, byteorder="big")
little_value = int.from_bytes(data, byteorder="little")
print(big_value, little_value)
61374 48879
bytes.fromhex() crea la sequenza di due byte e byteorder stabilisce come questi contribuiscono al risultato: con l’ordine big-endian si ottiene 61374, mentre con quello little-endian si ottiene 48879. In questo modo l’ordine dei byte è esplicito e non serve invertire manualmente la stringa esadecimale.
Converti un valore esadecimale in un intero con segno in Python
Una chiamata normale come int("ffff", 16) restituisce un intero non negativo. Per interpretare le cifre esadecimali come un valore con segno, definisci la larghezza in byte e decodifica quei byte con signed=True. In un valore a 16 bit, ffff rappresenta -1 in complemento a due:
hex_string = "ffff"
data = bytes.fromhex(hex_string)
signed_value = int.from_bytes(data, byteorder="big", signed=True)
print(signed_value)
-1
bytes.fromhex("ffff") fornisce due byte: questa conversione con segno ha quindi una larghezza di 16 bit e restituisce -1. Il bit più significativo è impostato e il complemento a due determina il valore con segno. Scegli l’ordine dei byte e la larghezza in base al formato dei dati che stai decodificando; int() da solo non deduce né l’uno né l’altra.