Erhalten Länge Dekodieren ASCII85
Frage
ASCII85 hat eine Funktion, die maximale Länge einer Codierung MaxEncodedLen()
zu erhalten.
ich denke, dass es auch eine Funktion, um die Länge zu bekommen Decodierung wie es hat in Base64 haben sollte.
Lösung
Hier ist eine Funktion Go package ascii85
MaxDecodedLen()
für n
codierten Bytes zu berechnen.
func MaxDecodedLen(n int) int {
const binWordLen = 4
return n * binWordLen
}
Wenn alle vier Bytes einer nicht codierten Gruppe Null sind, werden sie durch ein einzelnes Byte, das Zeichen z
, statt von fünf Ausrufezeichen (!!!!!
) dargestellt. In einigen Implementierungen kann durch die einzelnen Zeichen y
eine unverschlüsselte Gruppe von Räumen dargestellt werden.
ascii85.Decode()
, im Gegensatz zu ascii85.Encode()
weist Anzahl von Bytes verbraucht (nsrc
) und flush
Parameter, zusätzlich zu einer Anzahl von Bytes geschrieben (ndst
) Parameter, die der Programmierer ermöglicht mehrere Blöcke oder einen einzigen Block Stück-für-Stück zu dekodieren . Daher kann ein Zielpuffer von weniger als der MaxDecodedLen()
verwendet werden.
Andere Tipps
Meiner Meinung nach, während Codierung das MaxEncodedLen () ist zwingend die Anzahl von Bytes zu wissen, erforderlich, um die codierte Ausgabe (dh Zielpuffergröße) zu halten.
Wo bei der Decodierung kann der Anrufer die Zielpuffer der Größe passiert gleich zu Quellpuffer obwohl der Zielpuffer geringere Größe sein kann.
Alternativ können wir die ursprüngliche Quelle dh Ebene nicht codierte Puffergröße verwenden, wenn der Ausführungskontext / Umfang der Codierung und Decodierung gleich ist.
Daraus ergibt sich die erwartete Funktion, MaxDecodedLen () ist optional.