Introduzione al Codice ASCII

Concetti Chiave
  • Il codice ASCII è un codice binario standard che rappresenta caratteri alfanumerici e simboli utilizzando sette bit.
  • È ampiamente utilizzato nei computer e nelle comunicazioni digitali.
  • Il codice ASCII include 128 caratteri, tra cui lettere, numeri e simboli speciali.
  • Ogni carattere è rappresentato da una combinazione unica di sette bit, che consente di codificare informazioni in modo efficiente.
  • Il codice ASCII è compatibile con la maggior parte dei sistemi informatici e di comunicazione, rendendolo uno standard universale per la rappresentazione di testo.
  • Il codice ASCII può essere esteso per includere caratteri aggiuntivi, ma la versione standard utilizza solo sette bit.
  • Il bit di parità può essere utilizzato per rilevare errori di trasmissione nei dati ASCII, con la possibilità di utilizzare parità pari o dispari.

Codice Alfanumerico ASCII

Molte applicazioni dei computer digitali richiedono la gestione non solo di numeri ma anche di altri caratteri o simboli, come le lettere dell'alfabeto.

Per esempio, si consideri un'azienda con migliaia di dipendenti. Per rappresentare i nomi e altre informazioni pertinenti, è necessario formulare un codice binario per le lettere dell'alfabeto. Inoltre, lo stesso codice binario deve rappresentare numeri e caratteri speciali (come $). Un set di caratteri alfanumerici è un insieme di elementi che include le 10 cifre decimali, le 26 lettere dell'alfabeto e un numero di caratteri speciali. Tale insieme contiene tra 36 e 64 elementi se sono incluse solo lettere maiuscole, o tra 64 e 128 elementi se sono incluse sia lettere maiuscole che minuscole. Nel primo caso, abbiamo bisogno di un codice binario di sei bit, e nel secondo, abbiamo bisogno di un codice binario di sette bit.

Il codice binario standard per i caratteri alfanumerici è l'American Standard Code for Information Interchange (ASCII), che usa sette bit per codificare 128 caratteri, come mostrato nella tabella che segue. I sette bit del codice sono designati da b_1 a b_7, con b_7 che è il bit più significativo. La lettera A, per esempio, è rappresentata in ASCII come 1000001 (colonna 100, riga 0001). Il codice ASCII contiene anche 94 caratteri grafici che possono essere stampati e 34 caratteri non stampabili usati per varie funzioni di controllo.

b_7b_6b_5
b_4b_3b_2b_1 000 001 010 011 100 101 110 111
0000 NUL DLE SP 0 @ P ' p
0001 SOH DC1 ! 1 A Q a q
0010 STX DC2 " 2 B R b r
0011 ETX DC3 # 3 C S c s
0100 EOT DC4 \$ 4 D T d t
0101 ENQ NAK % 5 E U e u
0110 ACK SYN & 6 F V f v
0111 BEL ETB ' 7 G W g w
1000 BS CAN ( 8 H X h x
1001 HT EM ) 9 I Y i y
1010 LF SUB * : J Z j z
1011 VT ESC + ; K [ k {
1100 FF FS , 6 L l
1101 CR GS - = M ] m }
1110 SO RS 7 N ¿ n
1111 SI US / ? O - o DEL
Tabella 1: Codice ASCII per i caratteri alfanumerici.

I caratteri grafici consistono delle 26 lettere maiuscole (da A a Z), delle 26 lettere minuscole (da a a z), dei 10 numeri (da 0 a 9), e di 32 caratteri speciali stampabili, come %, *, e $.

I 34 caratteri di controllo sono designati nella tabella ASCII con nomi abbreviati. Nella tabella che segue sono elencati con la loro descrizione:

Caratteri di Controllo
NUL Null
SOH Inizio intestazione
STX Inizio testo
ETX Fine testo
EOT Fine trasmissione
ENQ Richiesta
ACK Riconoscimento
BEL Campanello
BS Backspace
HT Tabulazione orizzontale
LF Avanzamento riga
VT Tabulazione verticale
FF Avanzamento modulo
CR Ritorno carrello
SO Shift out
SI Shift in
SP Spazio
DLE Escape di collegamento dati
DC1 Controllo dispositivo 1
DC2 Controllo dispositivo 2
DC3 Controllo dispositivo 3
DC4 Controllo dispositivo 4
NAK Riconoscimento negativo
SYN Inattivo sincrono
ETB Fine blocco trasmissione
CAN Annulla
EM Fine del mezzo
SUB Sostituto
ESC Escape
FS Separatore file
GS Separatore gruppo
RS Separatore record
US Separatore unità
DEL Cancella
Tabella 2: Caratteri di controllo ASCII.

I caratteri di controllo sono usati per instradare i dati e organizzare il testo stampato in un formato prescritto. Ci sono tre tipi di caratteri di controllo: specificatori di formato, separatori di informazioni e caratteri di controllo comunicazione. Gli specificatori di formato sono caratteri che controllano il layout di stampa. Includono i controlli familiari del word processor e della macchina da scrivere come backspace (BS), tabulazione orizzontale (HT), e ritorno a capo (CR). I separatori di informazioni sono usati per separare i dati in divisioni come paragrafi e pagine. Includono caratteri come separatore record (RS) e separatore file (FS). I caratteri di controllo comunicazione sono utili durante la trasmissione di testo tra dispositivi remoti in modo che possa essere distinto da altri messaggi usando lo stesso canale di comunicazione prima e dopo di esso. Esempi di caratteri di controllo comunicazione sono STX (inizio testo) e ETX (fine testo), che sono usati per incorniciare un messaggio di testo trasmesso attraverso un canale di comunicazione.

ASCII è un codice a sette bit, ma la maggior parte dei computer manipola una quantità a otto bit come singola unità chiamata byte. Pertanto, i caratteri ASCII sono più spesso memorizzati uno per byte. Il bit extra è talvolta usato per altri scopi, a seconda dell'applicazione. Per esempio, alcune stampanti riconoscono caratteri ASCII a otto bit con il bit più significativo impostato a 0. Ulteriori 128 caratteri a otto bit con il bit più significativo impostato a 1 sono usati per altri simboli, come l'alfabeto greco o caratteri in corsivo.

Codice a Rilevazione di Errore

Per rilevare errori nella comunicazione e nell'elaborazione dei dati, talvolta viene aggiunto un ottavo bit al carattere ASCII per indicare la sua parità. Un bit di parità è un bit extra incluso con un messaggio per rendere il numero totale di 1 pari o dispari.

Consideriamo i seguenti due caratteri e quali bit sono stati aggiunti per la parità:

Valore originale Con parità pari Con parità dispari
ASCII A: 1000001 01000001 11000001
ASCII T: 1010100 11010100 01010100
Tabella 3: Caratteri ASCII con bit di parità.

In ogni caso, inseriamo un bit extra nella posizione più a sinistra del codice per produrre un numero pari di 1 nel carattere per la parità pari o un numero dispari di 1 nel carattere per la parità dispari. In generale, viene adottata l'una o l'altra parità, con la parità pari che è più comune.

Il bit di parità è utile nel rilevare errori durante la trasmissione di informazioni da una posizione a un'altra. Questa funzione è gestita generando un bit di parità pari all'estremità mittente per ogni carattere. I caratteri a otto bit che includono i bit di parità sono trasmessi alla loro destinazione. La parità di ogni carattere viene poi controllata all'estremità ricevente. Se la parità del carattere ricevuto non è pari, allora almeno un bit ha cambiato valore durante la trasmissione. Questo metodo rileva una, tre, o qualsiasi combinazione dispari di errori in ogni carattere che viene trasmesso. Una combinazione pari di errori, tuttavia, non viene rilevata, e potrebbero essere necessari codici di rilevazione errori aggiuntivi per gestire quella possibilità.

Quello che viene fatto dopo che un errore è rilevato dipende dalla particolare applicazione. Una possibilità è richiedere la ritrasmissione del messaggio assumendo che l'errore fosse casuale e non si verificherà di nuovo. Così, se il ricevente rileva un errore di parità, rimanda indietro il carattere di controllo ASCII NAK (not acknowledge) consistente di otto bit con parità pari 10010101. Se non viene rilevato nessun errore, il ricevente rimanda indietro un carattere di controllo ACK (acknowledge), cioè 00000110. L'estremità mittente risponderà a un NAK trasmettendo di nuovo il messaggio fino a quando viene ricevuta la parità corretta. Se, dopo un numero di tentativi, la trasmissione è ancora in errore, può essere inviato un messaggio all'operatore per controllare malfunzionamenti nel percorso di trasmissione.

Concludiamo con un esempio di calcolo del bit di parità pari per un carattere ASCII. Consideriamo il carattere C, che in binario è rappresentato come 01000011. Per calcolare il bit di parità pari, contiamo il numero di 1 nel codice:

  • Il codice 01000011 ha tre 1, quindi per ottenere una parità pari, il bit di parità deve essere 1. Pertanto, il carattere C con parità pari diventa 11000011.
  • Se, invece, vogliamo ottenere una parità dispari, il bit di parità deve essere 0, quindi il carattere C con parità dispari diventa 01000011.