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.

http://golang.org/pkg/encoding/ascii85/

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top