Basic Encoding Rules: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 115:
 
=== Codifica di L ===
In questa sezione si indica con ''Len(V)'' il numero di bytes di ''V''. </br>
La codifica di L è strettamente legata alla lunghezza del dato codificato ''V''.
Se si conosce a priori 'Len(V)' allora si procede con la codifica ''definite length'', altrimente si applica la codifica ''indefinite length''. La prima tecnica è preferibile in quanto permette un Decoding più semplice.
 
==== Encoding 'definite length' ====
In questo tipo di encoding si distinguono 2 casi distinti:
#se <math>Len(V)<127</math> allora ''L'' viene codificato in 1 byte
#se <math>Len(V)>127</math> allora ''L'' viene codificato in più byte
 
===== Caso 1: ''L'' in 1 byte =====
Questo è il caso più semplice. ''V'' è codificato in meno di 127 bytes ed L contiene esclusivamente il valore di ''Len(V)'' in esadecimale </br>
Il limite di 127 bytes è dato dal fatto che 127 è 0x7F in esadecimale (01111111 in binario) e quindi il primo bit di ''L'' è sicuramente zero.
Ciò è utile in fase di Decoding, infatti se il primo bit è zero, significa che è stata usata la codifica di L su un solo byte. </br>
</br>
Esempio: Se ''V'' è codificato su 120 bytes allora <math>L = 0x78</math> </br>
 
===== Caso 2: ''L'' in più bytes =====
In questo caso si procede nel seguente modo:
#si codifica in binario ''Len(V)''
#si calcola <math>Len(Len(V)) \,\!</math>, cioè la lunghezza in bytes di ''Len(V)''
#si pone nel primo byte di ''L'' = <math>Len(Len(V))+ 0x81\,\!</math>
#si pone nei bytes seguenti ''Len(V)''
 
La formula del punto 3 ha la seguente giustificazione:
*aggiungendo 0x80 si pone il primo bit del primo byte di L ad essere 1. Cio' serve in fase di Decoding per capire che stiamo usando una codifica di L su più bytes.
*aggiungendo 0x01 si ha che nei primi 7 bits del primo byte di ''L'' c'è in realtà la lunghezza di ''L'' in termini di byte, infatti <math>Len(Len(V))+ 1\,\!</math> indica proprio la lunghezza di L </br>
In fase di Decoding per capire che stiamo usando una codifica di L su più bytes di tipo ''definite form'' deve quindi essere:
*il primo bit del primo byte di ''L''= 1
*gli altri 7 bit del primo byte devono essere <math>\ne 0b0000000</math>
 
=== Codifica di V ===