Le basi dell’esadecimale

Ti sei mai sentito costretto a formare numeri con solo 10 cifre numeriche? O voleva rappresentare grandi numeri con meno cifre? O identificare facilmente i valori dei byte senza dover guardare la stringa ipnotica del binario di 1 e 0? Per applicazioni come queste, l’esadecimale diventa spesso il sistema numerico preferito dall’ingegnere informatico.

Introduzione

In matematica e informatica, il sistema numerico esadecimale(conosciuto come Hex) è un sistema numerico posizionale che rappresenta i numeri utilizzando una radice (base) di 16. A differenza del modo comune di rappresentare i numeri utilizzando 10 simboli, l’esadecimale utilizza 16 simboli distinti, “0”–”9″ per rappresentare i valori da 0 a 9 e “A”–”F” per rappresentare i valori da 10 a 15.

L’Hex, insieme a decimale e binario, è uno dei sistemi numerici più comuni nel mondo dell’elettronica e della programmazione. È importante capire come funziona l’esadecimale, perché, in molti casi, ha più senso rappresentare un numero in base 16 che con binario o decimale.

La base dell’Hex

Esadecimale è un sistema numerico in base 16. Ciò significa che ci sono 16 possibili cifre utilizzate per rappresentare i numeri. 10 dei valori numerici che probabilmente sei abituato a vedere in numeri decimali: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9; quei valori rappresentano ancora lo stesso valore a cui sei abituato. Le restanti sei cifre sono rappresentate da A, B, C, D, E e F, che corrispondono ai valori di 10, 11, 12, 13, 14 e 15.

Hex digits

Probabilmente incontrerai rappresentazioni sia maiuscole che minuscole di A-F. Entrambi funzionano. Non c’è molto di uno standard in termini di maiuscole e minuscole. A3F è lo stesso numero di a3f è lo stesso numero di A3f.

Pedice

Decimale ed esadecimale hanno 10 cifre in comune, quindi possono creare molti numeri dall’aspetto simile. Ma 10 in esadecimale è un numero completamente diverso da quello in decimale. Infatti esadecimale 10 è equivalente al decimale 16. Abbiamo bisogno di un modo per affermare esplicitamente se un numero di cui stiamo parlando è in base 10 o in base 16 (o in base 8 o in base 2). Inserisci i pedici di base:

Use subscripts to explicitly state which base a number is
l’Esadecimale 10, indicato da un pedice 16, è equivalente al decimale 16 (notare il pedice 10).

Come vedrai più in basso, i pedici non sono l’unico modo per dichiarare esplicitamente la base di un numero. I pedici sono solo il sistema più letterale che possiamo usare.

Contare in Hex

Il conteggio in esadecimale è molto simile al conteggio in decimale, tranne per il fatto che ci sono altre sei cifre da gestire. Una volta che la posizione di una cifra diventa maggiore di “F”, si passa a “0” e si incrementa la cifra a sinistra di 1.
facciamo un esempio:

hexadecimalchart1.png
Numeri da 0 a 255 in Hex

Una volta raggiunto F16, proprio come si lancerebbe da 910 a 1010 in decimale, si ottiene fino a 1016
E una volta raggiunto 1F16, torna al 2016 e continua a sfornare la cifra più a destra da 0 a F.

Identificatori Hex

Esistono molti altri prefissi e suffissi specifici per determinati linguaggi di programmazione. I linguaggi assembly, ad esempio, potrebbero utilizzare un suffisso “H” o “h” (ad esempio 7Fh) o un prefisso “$” ($6AD). Consulta gli esempi se non sei sicuro di quale prefisso o suffisso utilizzare con il tuo linguaggio di programmazione. Il prefisso “0x” è uno che vedrai molto, specialmente se stai eseguendo qualsiasi programmazione Arduino. Lo useremo d’ora in poi in questo tutorial. In sintesi: DECAF? Un orribile abominio del caffè. 0xDECAF? Un numero esadecimale di 5 cifre perfettamente accettabile.

Esistono molti altri prefissi e suffissi specifici per determinati linguaggi di programmazione. I linguaggi assembly, ad esempio, potrebbero utilizzare un suffisso “H” o “h” (ad esempio 7Fh) o un prefisso “$” ($6AD). Consulta gli esempi se non sei sicuro di quale prefisso o suffisso utilizzare con il tuo linguaggio di programmazione.

Il prefisso “0x” è uno che vedrai molto, specialmente se stai eseguendo qualsiasi programmazione Arduino. Lo useremo d’ora in poi in questo tutorial.

In sintesi: DECAF? Un orribile abominio del caffè. 0xDECAF? Un numero esadecimale di 5 cifre perfettamente accettabile.

Conversione in/da decimale

Ormai sappiamo come convertire circa 16 valori tra decimali ed esadecimali. Per convertire numeri più grandi, ecco alcuni trucchi che ci sono.
I passaggi per convertire un numero qualsiasi chiamato N, da decimale a esadecimale assomigliano a questo:

  • Dividi N per 16. Il resto di quella divisione è la prima cifra (meno significativa/più a destra) del tuo numero esadecimale. Porta il quoziente (il risultato della divisione) al passaggio successivo.
    Nota: se il resto è 10, 11, 12, 13, 14 o 15, allora diventa la cifra esadecimale A, B, C, D, E o F.
  • Dividi nuovamente il quoziente dell’ultimo passaggio per 16. Il resto di questa divisione è la seconda cifra del tuo valore esadecimale (secondo da destra).
  • Dividi nuovamente il quoziente del passaggio 2 per 16. Il resto di questa divisione è la terza cifra della tua conversione esadecimale.
  • Continua a dividere il tuo quoziente dall’ultimo passaggio per 16 e a memorizzare il resto fino a quando il risultato di una divisione è 0. Il resto di quella divisione è la cifra più a sinistra e più significativa del tuo valore esadecimale.

Esempio da decimale a esadecimale:

Convertire da Hex a Decimale

h_{n}16^{n}+h_{n-1}16^{n-1}+\cdots +h_{1}16^{1}+h_{0}16^{0}

Ci sono alcuni elementi importanti in questa equazione. Ciascuno dei fattori h (hn, hn-1) è una singola cifra del valore esadecimale. Se il nostro valore esadecimale è 0xF00D, ad esempio, h0 è D, h1 e h2 sono 0 e h3 è F.

Le potenze di 16 sono una parte critica dell’esadecimale. Le cifre più significative (quelle verso il lato sinistro del numero) vengono moltiplicate per potenze maggiori di 16. La cifra meno significativa, h0, viene moltiplicata per 160 (1). Se un valore esadecimale è lungo quattro cifre, la cifra più significativa viene moltiplicata per 163 o 4096.

Per convertire un numero esadecimale in decimale, è necessario inserire i valori per ciascuno dei fattori h nell’equazione sopra. Quindi moltiplica ogni cifra per la rispettiva potenza di 16 e somma ogni prodotto. Il nostro approccio passo dopo passo è:

  • Inizia con la cifra più a destra del tuo valore esadecimale. Moltiplicalo per 160, ovvero: moltiplica per 1. In altre parole, lascialo stare, ma tieni da parte quel valore.
  • Ricorda di convertire i valori esadecimali alfabetici (A, B, C, D, E e F) nel loro equivalente decimale (10, 11, 12, 13, 14 e 15).
    Sposta una cifra a sinistra. Moltiplica quella cifra per 161 (cioè moltiplica per 16). Ricorda quel prodotto e tienilo da parte. Sposta un’altra cifra a sinistra. Moltiplica quella cifra per 162 (256) e memorizza quel prodotto.
  • Dopo aver moltiplicato ogni cifra del valore esadecimale per la giusta potenza di 16, sommali tutti. Quella somma è l’equivalente decimale del tuo valore esadecimale.
Cifra EsadecimaleNote
Posizione della cifra(n)3210Questi valori sono assegnati staticamente, crescono verso sinistra.
Cifre esadecimali ordinateC0DEQuesta parte è facile, inserisci i tuoi valori esadecimali da destra a sinistra.
Convertitore A-F1201314converte valori A-F a 10-15.
Moltiplica per 16n12 × 1630 × 16213 × 16114 × 160L’esponente di 16 è la posizione,n.
Prodotti risultanti49152020814Il prodotto della cifra esadecimale e la potenza di 16.
Riassumi tutti i prodotti49374Il nostro equivalente decimale!

In Esadecimale C0DE ha il valore 49374

Questo metodo di tabella è perfetto per mantenere allineate tutte le cifre esadecimali, le posizioni e le potenze di 16. Per convertire numeri esadecimali più grandi, basta aggiungere una colonna a sinistra e aumentare n.

Convertire da/in Binario

La conversione tra esadecimale e binario è facile, perché ogni cifra di un numero esadecimale “mappa” a quattro bit (un bit è una singola cifra binaria) di un valore binario. Quindi un byte – otto cifre binarie – può sempre essere rappresentato da due cifre esadecimali. Questo rende esadecimale un modo davvero ottimo e conciso per rappresentare un byte o un gruppo di byte.

Convertire da binario in Hex

Man mano che cresci e continui a utilizzare esadecimale e binario, questi 16 valori diventeranno radicati nel tuo cervello. Queste sono la chiave per la conversione tra esadecimale e binario. Per convertire tra binario ed esadecimale, vogliamo sfruttare il fatto che quattro cifre binarie (bit) sono mappate su una cifra esadecimale. Segui questi passaggi per convertire da binario a esadecimale.

  • Dividere un valore binario in gruppi di quattro, iniziando dal lato più a destra.
  • Per ogni gruppo di quattro, consultare la tabella sopra per trovare il valore esadecimale corrispondente e sostituire i gruppi di quattro cifre binarie con un valore esadecimale.

Convertire da Hex in Binario

La conversione da esadecimale a binario è molto simile alla conversione da binario a esadecimale. Basta prendere una cifra esadecimale e trasformarla in quattro cifre binarie. Ripeti finché il tuo numero non è pieno di 0 e 1.

Esadecimale in programmazione

Uso esadecimale per rappresentare e identificare i byte

Gli esempi sopra mostrano uno dei più grandi poteri di esadecimale: rappresentare facilmente i valori dei byte. Esadecimale è spesso più facile per noi lavorare con perché i valori sono più brevi e più memorabili di una lunga stringa di 1 e 0.

Ad esempio, la mappa dei registri sopra è dell’LSM9DS0 (sensore 9DOF). Elenca gli indirizzi di registro, utilizzati per controllare il sensore, sia in formato esadecimale che binario. Se vuoi accedere al registro CTRL_REG2_G, è molto più facile ricordare 0x21 rispetto a 0b010001 e scoprire un errore di battitura nel valore esadecimale è molto più semplice che in binario. Per questo motivo, è molto più probabile che usiamo valori esadecimali nel nostro codice rispetto ai loro equivalenti binari.

Editor Hex

Un Editor Esadecimale è un programma per computer che consente la manipolazione dei dati binari fondamentali che costituiscono un file informatico. Il nome ‘hex’ deriva da ‘esadecimale’, un formato numerico standard per la rappresentazione di dati binari. Un tipico file di computer occupa più aree del supporto di memorizzazione, i cui contenuti vengono combinati per formare il file. Gli editor esadecimali progettati per analizzare e modificare i dati di settore dai segmenti fisici di floppy o dischi rigidi sono talvolta chiamati editor di settore o editor di dischi.

Con un editor esadecimale, un utente può vedere o modificare i contenuti grezzi ed esatti di un file, al contrario dell’interpretazione dello stesso contenuto che altri software applicativi di livello superiore possono associare al formato del file. Ad esempio, potrebbero trattarsi di dati di immagine grezzi, in contrasto con il modo in cui il software di modifica delle immagini interpreterebbe e mostrerebbe lo stesso file.

Gli editor esadecimali possono essere utilizzati per correggere i dati danneggiati da problemi del sistema o del programma applicativo in cui potrebbe non valere la pena scrivere un programma speciale per apportare le correzioni. Sono utili per aggirare i controlli di modifica dell’applicazione che potrebbero impedire la correzione di dati errati. Sono stati usati per “patchare” programmi eseguibili per modificare o aggiungere alcune istruzioni in alternativa alla ricompilazione. Le correzioni del programma per i sistemi mainframe IBM sono talvolta distribuite come patch anziché distribuire una copia completa del programma interessato.


Nella maggior parte delle applicazioni di editor esadecimale, i dati del file del computer sono rappresentati come valori esadecimali raggruppati in 4 gruppi di 4 byte (o due gruppi di 8 byte), seguiti da un gruppo di 16 caratteri ASCII stampabili che corrispondono a ciascuna coppia di valori esadecimali (ogni byte). I caratteri ASCII non stampabili (ad es. Bell) e i caratteri che richiederebbero più di uno spazio carattere (ad es. Tab) sono generalmente rappresentati da un punto (“.”) nel campo ASCII seguente.

A differenza degli editor di testo convenzionali, gli editor esadecimali sono in grado di gestire in modo efficiente file con dimensioni indefinite, poiché solo una parte del file viene caricata durante la navigazione e modificata durante il salvataggio, anziché l’intero file contemporaneamente.

Gli editor esadecimali avanzati dispongono di sistemi di scripting che consentono all’utente di creare funzionalità simili a macro come una sequenza di comandi dell’interfaccia utente per automatizzare attività comuni. Questo può essere utilizzato per fornire script che patchano automaticamente i file (ad esempio, imbrogli di giochi, modding o correzioni di prodotti forniti dalla community) o per scrivere modelli più complessi/intelligenti.

I linguaggi di scripting variano ampiamente, spesso essendo linguaggi specifici del prodotto che assomigliano a file batch MS-DOS, a sistemi che supportano linguaggi di scripting completi come Lua o Python.

linktree
bitcoin

/ 5
Grazie per aver votato!
mycus
Author: mycus