Basic Encoding Rules: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 45:
==== Primo byte di T ====
Vediamo qui sotto come si presenta il primo byte di T:
[[immagine:BERPrimobyte_T.JPG |thumb|400px|center|Primo byte di T]]
La codifica di CLASS segue la seguente tabella:
Riga 117:
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 (''short definite form'')
#se <math>Len(V)>127</math> allora ''L'' viene codificato in più byte (''long definite form'')
===== Caso 1: ''L'' in 1 byte ''short definite form'' =====
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.
[[immagine:Short_Defined_Form_L.JPG |thumb|500px|center|L in Short Defined Form]]</br>
===== Caso 2: ''L'' in più bytes ''long definite form'' =====▼
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)''
Line 141 ⟶ 139:
*aggiungendo 0x80 si pone il primo bit del primo byte di L ad essere 1.
*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>
[[immagine:Long_Defined_Form_L.JPG |thumb|500px|center|L in Short Defined Form]]</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>
===== Esempio 1 di Codifica di L in ''definite form'' =====
▲
=== Codifica di V ===
|