Domanda

Come ho capito le specifiche, un codificatore Base64

a) prende il binario di origine e lo completa con zero in modo che sia un multiplo di 24 byte.

b) poi lo transcodifica, sei bit alla volta, nel set target di 64 caratteri (A..Z, a..z, 0..9, +, -). Se rileva che gli ultimi due byte (16 bit) sono stati riempiti di zero, gli ultimi due caratteri vengono transcodificati come '=='. Se rileva che l'ultimo byte (8 bit) è stato riempito di zero, l'ultimo carattere viene transcodificato come '='.

La mia domanda è, nel passaggio (b), come fa a sapere che gli ultimi byte sono zero perché sono stati riempiti rispetto a zero perché fanno parte dei dati di origine binari validi?

È che il sottosistema responsabile della parte (b) deve sapere cosa è accaduto durante la parte (a)

È stato utile?

Soluzione

L'encoder (al contrario del decoder) conoscerà la lunghezza dei dati di input e sarà in grado di capire se non produrre nulla, " = " o " == " alla fine. La tua domanda presume che non ci sia alcun collegamento tra le due fasi che menzioni, ma ciò non è vero nelle implementazioni che ho visto.

L'implementazione che ho dovuto scrivere non ha fatto affatto il primo stadio poiché aveva routine per estrarre gruppi di 6 bit dal flusso di input uno alla volta, incrementando byteCount ogni volta. Quindi, alla fine, l'espressione " byteCount% 3 " è stato usato per decidere quale stringa aggiungere al flusso di output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top