
La funzione fromhex() in Python
La funzione fromhex() in Python converte una stringa esadecimale (hex) in una sequenza di byte.
fromhex(string)
Il parametro string tra le parentesi tonde è una stringa che rappresenta i dati in formato esadecimale (hexadecimal).
La funzione restituisce un oggetto bytes o bytearray a seconda della classe che chiama il metodo.
La stringa esadecimale deve essere composta solo da cifre esadecimali (0-9, a-f, A-F) e può includere spazi per migliorare la leggibilità. La lunghezza della stringa esadecimale (escludendo gli spazi) deve essere pari, poiché ogni coppia di cifre rappresenta un byte.
Ecco alcuni esempi pratici.
Definisci una sequenza di codici esadecimali in una stringa.
hex_data = "68656c6c6f"
I codici esadecimali usati in questa stringa hanno questo significo
- 68 è il codice della lettera "h"
- 65 è il codice della lettera "e"
- 6c è il codice della lettera "l"
- 6f è il codice della lettera "o"
Poi converti i valori esadecimali in una stringa di byte tramite la funzione fromhex()
byte_data = bytes.fromhex(hex_data)
Stampa il contenuto della stringa di byte
print(byte_data)
Il contenuto è la stringa di byte "hello"
b'hello'
In questo caso il risultato è una stringa di byte.
Avresti potuto ottenere lo stesso risultato anche inserendo degli spazi tra i codici esadecimali per migliorarne la leggibilità.
hex_data = "68 65 6c 6c 6f"
byte_data = bytes.fromhex(hex_data)
print(byte_data)
Il risultato finale sarebbe stato sempre lo stesso.
b'hello'
Puoi usare la funzione fromhex() anche per creare un oggetto bitarray()
hex_data = "68 65 6c 6c 6f"
byte_array_data = bytearray.fromhex(hex_data)
print(byte_array_data)
In questo caso il risultato è un oggetto bitarray()
bytearray(b'hello')
In generale, il metodo fromhex() ti permette di leggere i dati binari rappresentati come stringhe esadecimali e di convertire i valori esadecimali in byte per analizzare pacchetti di rete o contenuti di file binari.
Fai attenzione agli errori causati dauna lunghezza dispari o dall'utilizzo di caratteri non esadecimali nella stringa, questi causeranno un ValueError. Inoltre, ricordati che questa funzione è specifica per la conversione di stringhe esadecimali in dati binari. Non è adatta per altre rappresentazioni numeriche o stringhe non esadecimali.
Se vuoi conoscere la rappresentazione esadecimale di un oggetto bytes o bytearray puoi compiere l'operazione inversa usando i metodi ord() e hex().
Ad esempio, per conoscere il valore esadecimale del carattere "h" puoi scrivere
print(hex(ord("h")))
Il risultato è il seguente:
0x68
Questo vuol dire che il codice esadecimale per realizzare la lettera "h" è 68.