Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Devo trasformare (ad esempio) la parola hellohello in una stringa formata da 8 bit, in modo da poterla utilizzare per mandare SMS sui cellulari. Ammetto che questa richiesta mi ha impegnato per almeno un'ora (e un'altra ora aggiuntiva per effettuare alcune correzzioni), ma alla fine siamo riusciti a produrre i risultati voluti. Per effettuare quest'operazione è necessario conoscere bene i diversi sistemi di numerazione, in particolare la conversione da sistema decimale a sistema binario, per questo motivo le due funzioni di conversioni da un sistema all'altro non verranno approfondite. Per effettuare queste operazioni consultare la sezione Informazioni aggiuntive. Prima di cominciare dobbiamo prendere coscienza che l'invio di messaggi
telefonici può avvenire su qualsiasi piattaforma. Pertanto l'alfabeto
da utilizzare non è il solito charset ASCII.
Esiste un alfabeto apposito che definisce i codici per tutti i simboli
utilizzabili in un messaggio SMS. Inseriremo l'intero alfabeto e le formule
per trattarlo in un modulo
separato. Purtroppo alcuni simboli non possono essere rappresentati con
il charset ASCII e pertanto non saranno convertiti; questi simboli sono
alcune lettere greche maiuscole. L'alfabeto dedicato utilizza una cifra composta da sette bit per la maggior parte dei caratteri. Soltanto 10 caratteri non rientrano in tale range. I caratteri che non rientrano in tale spazio allocato saranno trattati come una coppia di tali valori, pertanto saranno rappresentati da due caratteri.
All'interno del primo modulo definiamo le seguenti variabili globali pubbliche:
Alla riga 1 abbiamo definito un array di 128 (ovvero 7 cifre binarie) stringhe compresa quella a posizione zero di nome LettereAlfabeto. Esso conterrà tutti i caratteri normali composti da un solo carattere. Alla riga 2 abbiamo un altro array di 10 stringhe di nome ExtraAlfabeto per contenere i dieci simboli che sono composti da due caratteri. Ad esso si affianca un terzo array di nome ValoreExtraAlfabeto, sempre di 10 elementi, che conterrà il codice corrispondente al simbolo speciale. Tali vettori andranno riempiti (inzializzati) da una funzione apposita. Il suo nome è InizializzaAlfabeto, dichiarata pubblica. Ne vediamo un pezzetto perché è molto ampia:
Seguono i vari simboli...
Nelle righe 6-145 abbiamo i 128 simboli standard composti da un solo numero. Il loro numero è la posizione all'interno dell'array. Alle righe 147-156 abbiamo i dieci simboli speciali, composti da due caratteri. Il valore che viene inserito negli elementi di ValoreExtraAlfabeto sono dati dalla concatenazione esadecimale dei due simboli separati.
Ad esempio il simbolo "^" si compone dei due caratteri a cui corrispondono i valori esadecimali 1B e 14 ovvero i numeri decimali 27 e 20. Concatenando i due valori esadecimali otteniamo il numero esadecimale 1B14 ovvero il valore decimale 6932, che abbiamo inserito nell'array ValoreExtraAlfabeto. Questo genere di operazione macchinosa si è resa necessaria per poter distinguere i due bytes di cui si compone ogni simbolo speciale. Il modulo si completa con la funzione che si occupa di restituire il codice cui corrisponde ogni simbolo, speciale o non.
La funzione è denominata TrovaCarattereAlfabeto7, richiede una stringa (il carattere da cercare) e riporta un numero intero corrispondente al codice nell'alfabeto appena visto. Alle righe 162-164 effettuiamo un primo controllo dell'alfabeto standard (i 128 elementi) alla ricerca del carattere di cui trovare il codice. Se il codice viene trovato viene forzata l'uscita dal ciclo for (riga 163). Pertanto, l'uscita dal ciclo for indicherà che abbiamo trovato il carattere richiesto oppure che dopo l'intera analisi dell'array LettereAlfabeto il carattere non è stato trovato. In questo ultimo caso però, il valore di Conta sarà 128 (ovvero un numero superiore alla dimensione dell'array).
Sfrutteremo pertanto proprio tale valore. Se il valore di Conta è inferiore o uguale a 127, il valore Conta sarà il numero che dovremo restituire in uscita alla funzione. Nel caso contrario dovremo controllare il secondo array con i simboli speciali. Pertanto alle righe 166-168 effettueremo questo secondo controllo. All'uscita
del ciclo Conta avrà il valore corrispondente alla posizione del
carattere speciale nell'array. La funzione si chiude con la restituzione del numero contenuto in Conta. La soluzione, purtroppo è molto macchinosa, ma l'alfabeto da utilizzare
è molto diverso dall'ASCII utilizzabile sui normali PC. |
Fibia
FBI
|
Torna all'introduzione delle Richieste dei lettori |