Basic Encoding Rules: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
PiziaBot (discussione | contributi)
m Bot: Sostituzione automatica (-([Pp])erch(è|[e']) +\1erché)
Nessun oggetto della modifica
Riga 155:
 
=== Codifica di V ===
La codifica di ''V'', come è stato più volte detto, dipende tal tipo ''T'' e dalla sua definizione tramite sintassi [[ASN.1]] In questa sede sara' illustrata la codifica dei 3 tipi principali: INTEGER, OCTECT STRING e OBJECT ID. Per una panoramica completa di codifica decodifica si rimanda ancora a [http://www.oss.com/asn1/booksintro.html] o [http://www.oss.com/asn1/booksintro.html] </br>
 
==== Codifica di ''INTEGER'' ====
La codifica di un dato INTEGER dipende dal suo segno. Il primo bit del primo byte codificato è detto ''bit segno''. Se questo è 0 allora il numero è positivo, altrimenti è negativo. </br>
 
===== INTEGER Positivi =====
In questo caso la codifica è data dal valore binario del numero, a patto che si rispetti il ''bit segno'', altrimenti bisogna aggiungere in testa un byte di zeri</br>
Infatti se l'integer è ad es. 100 allora si ha: <math>V = 100_{10} = 0x64 = 01100100_2</math>. In questo caso il ''bit segno'' è zero e quindi la codifica è corretta.</br>
Se invece l'integer è ad es. 250 allora si ha: <math>V = 250_{10} = 0xFA = 11111010_2</math>. In questo caso il ''bit segno'' è 1 e quindi in fase di decodifica rappresenterebbe un numero negativo, vanno quindi aggiunti gli zeri in testa. In definitiva <math>V = 250_{10} = 0xFA = 0x00FA = 0000000011111010_2</math>. COme si puo' notare, aggiungendo gli zeri in testa il ''bit segno'' è correttamente zero.
 
===== INTEGER Negativi =====
Per gli integer negativi si utlizza il [[Complemento_a_due]] del valore. Ciò assicura che il ''bit segno'' è sempre negativo.
In particolare i passi da seguire sono:
* si codifica <math>\left |valore \right |</math> con le regole indicate sopra
* si calcola il ''Complemento a uno'' cioè si nega bit a bit
* si aggiunge infine al numero ottenuto <math>+ 1_2</math> </br>
 
Ad esempio se valore = -100 si ha:
* <math>\left |valore \right | = 100_{10} = 01100100_2</math> <small>(vedi es. INTEGER Positivi)</small>
* complemento a 1: <math>01100100_2 -> 10011011_2</math>
* aggiungere <math>+ 1_2</math>. Si ottine <math>10011011_2 + 1_2 = 10011100_2</math></br>
Quindi <math>V = 10011100_2 = 0x9C</math></br></br>
Se invece valore = -250 si ha:
* <math>\left |valore \right | = 250_{10} = 0000000011111010_2</math> <small>(vedi es. INTEGER Positivi)</small>
* complemento a 1: <math>0000000011111010_2 -> 1111111100000101_2</math>
* aggiungere <math>+ 1_2</math>. Si ottine <math>1111111100000101_2 + 1_2 = 1111111100000110_2</math></br>
Quindi <math>V = 1111111100000110_2 = 0xFF06</math></br></br>
 
 
== Collegamenti esterni ==