§

Options

Modalità
Raggruppamento hex
Prefisso 0x
Maiuscole/minuscole
Codifica testo
§

Input

§

Output

Gli ingegneri di Eni SpA alla raffineria di Sannazzaro de’ Burgondi usano la conversione hex ↔ ASCII ogni volta che ispezionano i frame Modbus seriali raccolti dai sistemi SCADA: le intestazioni di protocollo si leggono agevolmente in esadecimale mentre i payload nascondono spesso stringhe ASCII dentro il framing binario. Gli analisti di Intesa Sanpaolo che esaminano i messaggi ISO 8583 per il riconcilio delle transazioni POS convertono i campi esadecimali in ASCII per verificare codici risposta e tag BMP. Questo convertitore svolge la stessa operazione senza mai uscire dalla scheda del browser.

Come funziona la codifica hex

Ogni carattere in una pagina è memorizzato come uno o più byte. La codifica hex riscrive quei byte in base 16, due caratteri per byte, così il flusso di byte è leggibile senza strumenti speciali.

  1. Codifica il testo in byte. La modalità UTF-8 elabora l’input tramite new TextEncoder().encode(text), che restituisce un Uint8Array di valori byte. La modalità Latin-1 prende gli otto bit bassi di ogni unità di codice tramite charCodeAt(0) & 0xFF, che è la conversione eseguita dai codec legacy ISO-8859-1.
  2. Rappresenta ogni byte come due cifre hex. Ogni byte viene mappato a due cifre hex tramite byte.toString(16).padStart(2, "0"). Il selettore maiuscole/minuscole sceglie tra maiuscolo (A-F) o minuscolo (a-f) per le lettere dell’output.
  3. Applica raggruppamento e prefisso. Il raggruppamento inserisce un separatore tra i byte: uno spazio singolo, un trattino, o uno spazio ogni quattro byte. Il prefisso 0x può essere anteposto una sola volta all’intera stringa (raggruppamento Nessuno) oppure per ogni byte (raggruppamento Spazio), seguendo le convenzioni degli array C e degli strumenti di diff binario.
  4. Decodifica in senso inverso. La modalità Hex → Testo rimuove ogni spazio, trattino e prefisso 0x dall’input, convalida i caratteri rimanenti tramite /^[0-9a-fA-F]+$/, rifiuta le stringhe di lunghezza dispari e ricostruisce un Uint8Array da coppie successive di byte. La modalità UTF-8 decodifica l’array con new TextDecoder("utf-8", { fatal: true }); la modalità Latin-1 mappa ogni byte a String.fromCharCode(b).
  5. Modalità live per iterazioni rapide. La modalità live è attiva per impostazione predefinita. Ogni pressione di tasto pianifica una riconversione con debounce di 150 ms, così puoi incollare, modificare e vedere il pannello aggiornarsi senza dover cliccare il pulsante Converti.

Perché usare un convertitore hex

  • Debug di protocolli binari. I formati wire come Modbus, DNP3 e CoAP collocano le intestazioni in specifici offset di byte. Leggere un frame catturato in hex mostra ogni campo a colpo d’occhio, e convertire quegli stessi byte in ASCII rivela qualsiasi payload in chiaro presente accanto al framing binario.
  • Lavoro con firmware embedded. Le sonde JTAG e SWD riportano il contenuto della memoria in hex. Tradurre una regione di memoria in ASCII individua le stringhe incorporate (percorsi di file, messaggi di errore, firme del produttore) che spesso indicano esattamente dove ci si trova nel firmware.
  • Lettura di catture di pacchetti. Wireshark e tcpdump mostrano entrambi un pannello byte che stampa ogni pacchetto in hex a sinistra e ASCII a destra. Convertire uno snippet qui consente di copiare un blob hex da un report di bug o una chat e leggere cosa dicono i byte senza reimportarli in uno strumento di cattura.
  • Diff a livello di byte. Confrontare due file binari spesso si riduce a individuare quali byte sono cambiati. Convertire entrambi i lati in hex con un raggruppamento coerente allinea il diff in un editor di testo, dove uno strumento diff integrato può evidenziare i byte modificati.

Applicazioni comuni

La conversione hex ↔ ASCII emerge nel reverse engineering, nella sicurezza e nel lavoro embedded ogni volta che un flusso di byte è più di un semplice payload testuale.

  • Reverse engineering: prendi un dump hex da un binario resistente a strings, individua le sequenze che si decodificano come ASCII stampabile e usa quelle stringhe per orientarti nel disassemblato.
  • Forensica di rete: copia il payload di un singolo pacchetto da Wireshark in formato hex, incollalo qui e leggi il testo a livello applicativo senza esportare l’intera cattura.
  • Gestione di materiale crittografico: una chiave, un IV o un tag HMAC arriva spesso come stringa hex. Decodificarla in byte conferma che la lunghezza corrisponde all’algoritmo (16 byte per AES-128, 32 per AES-256) prima di inserirla in una configurazione.

Un esempio guidato

Seleziona Testo → Hex, UTF-8, minuscolo, raggruppamento Spazio ogni byte, prefisso disattivo. Digita Hi: l’output mostra 48 69. Attiva il prefisso e imposta il raggruppamento su Nessuno: lo stesso input diventa 0x4869. Incolla l’emoji 😀 come input e la modalità UTF-8 mostra f0 9f 98 80 — quattro byte per un solo code point, ecco perché le emoji spesso aumentano la dimensione di trasmissione. Passa a Hex → Testo e incolla 0x48-65-6C 6C 6F: il parser rimuove il prefisso, i trattini e gli spazi e ricostruisce Hello.

FAQ

Che cos'è la codifica hex?

La codifica hex (o codifica esadecimale) scrive un flusso di byte in base 16, due caratteri ASCII per byte. Ogni cifra hex copre quattro bit, quindi due cifre coprono un byte a otto bit. L’alfabeto va da 0 a 9 e poi da A a F (o a-f); le maiuscole sono solo una scelta di presentazione e i decoder accettano entrambe. L’hex è il modo standard per scrivere byte grezzi nelle specifiche di protocollo, nell’output dei debugger e nelle chiavi crittografiche perché è due volte più compatto del binario ed evita i problemi dei caratteri non stampabili nei byte grezzi in formato testuale.

Perché la mia emoji diventa 4 byte in hex?

UTF-8 è una codifica a lunghezza variabile. I caratteri ASCII (U+0000–U+007F) occupano un byte, i supplementi Latin-1 ne occupano due, la maggior parte degli altri code point BMP ne occupa tre, e i caratteri sopra U+FFFF — incluse la maggior parte delle emoji — ne occupano quattro. La faccina sorridente 😀 è U+1F600 e si codifica in F0 9F 98 80. Se hai bisogno di una vista byte a larghezza fissa, passa a Latin-1 — ma Latin-1 copre solo i primi 256 code point, quindi qualsiasi carattere al di fuori di quell’intervallo non può fare il round-trip.

Supporta Latin-1 / ISO-8859-1?

Sì. Imposta l’opzione Codifica testo su Latin-1 (ISO-8859-1). La codifica prende gli otto bit bassi di ogni unità di codice JavaScript (charCodeAt(0) & 0xFF), che corrisponde alla mappatura legacy a byte singolo. La decodifica usa String.fromCharCode(byte) per ogni byte. Usa Latin-1 quando lavori con output da sistemi Windows-1252 o pre-Unicode dove ogni byte rappresenta esattamente un carattere.

La conversione avviene nel mio browser?

Sì. Il convertitore esegue TextEncoder, TextDecoder e un piccolo parser come pagina statica. Non c’è alcun caricamento, nessuna chiamata API e nessuna analisi di ciò che incolli — solo le metriche standard di caricamento pagina condivise con il resto del sito. Gli stessi byte hex che vedi qui sono quelli che produrrebbe uno script Node o una funzione Lambda con lo stesso input.

La conversione hex ↔ ASCII è un’operazione semplice che chiunque lavori con protocolli binari o firmware embedded esegue più volte al giorno. Farlo in una scheda del browser, con gli stessi encoder nativi già presenti in Node e V8, mantiene il lavoro veloce e il flusso di byte sulla propria macchina.