Pregunta

ASCII85 tiene una función para obtener la longitud máxima de una codificación MaxEncodedLen().

Creo que debería tener también una función para obtener la longitud en la decodificación como lo ha hecho en base 64.

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

¿Fue útil?

Solución

Aquí hay una función para calcular Ir package ascii85 MaxDecodedLen() de bytes n codificado.

func MaxDecodedLen(n int) int {
    const binWordLen = 4
    return n * binWordLen
}

Si los cuatro bytes de un grupo sin codificar son cero, que están representados por un solo byte, el z carácter, en lugar de en cinco puntos de exclamación (!!!!!). En algunas implementaciones, un grupo sin codificar de los espacios puede ser representado por la sola y carácter.

ascii85.Decode(), a diferencia de ascii85.Encode(), tiene el número de bytes consumido (nsrc) y los parámetros flush, además de un número de bytes de parámetros (ndst) escrito, el cual permite al programador para decodificar múltiples bloques o un solo bloque pieza por pieza . Por lo tanto, una memoria intermedia de destino de menos de la MaxDecodedLen() puede ser utilizado.

Otros consejos

En mi opinión, Mientras que codifica la MaxEncodedLen () es obligatorio conocer el número de bytes necesarios para mantener la salida codificada (es decir, tamaño del búfer de destino).
Donde en el caso de la decodificación, la persona que llama puede pasar el búfer de destino de tamaño igual al búfer de origen aunque el búfer de destino puede ser menor tamaño.
Alternativamente podemos usar la fuente original es decir, tamaño llano no codificada buffer, si el contexto de ejecución / ámbito de la codificación y decodificación son los mismos. Por lo tanto la función esperada, MaxDecodedLen () es opcional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top