2010-04-29 5 views

Répondre

0

Voici une fonction à calculer Go package ascii85MaxDecodedLen() pour n octets codés.

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

Si les quatre octets d'un groupe non codés sont nuls, ils sont représentés par un seul octet, le caractère z, au lieu de cinq points d'exclamation (!!!!!). Dans certaines implémentations, un groupe d'espaces non codé peut être représenté par le caractère unique y.

ascii85.Decode(), contrairement à ascii85.Encode(), a nombre d'octets consommée (nsrc) et flush paramètres, en plus d'un certain nombre d'octets écrits paramètre (ndst), qui permet au programmeur de décoder de multiples blocs ou d'un bloc seul tenant par cas pièce. Par conséquent, un tampon de destination inférieur au MaxDecodedLen() peut être utilisé.

0

À mon avis, lors du codage des MaxEncodedLen() est obligatoire de connaître le nombre d'octets nécessaires pour maintenir la sortie codée (ie taille de la mémoire tampon de destination).
En cas de décodage, l'appelant peut passer le tampon de destination de taille égale au tampon source même si le tampon de destination peut être de taille inférieure.
Nous pouvons également utiliser la source d'origine, c'est-à-dire la taille de la mémoire tampon non codée, si le contexte d'exécution/la portée du codage et du décodage sont identiques. D'où la fonction attendue, MaxDecodedLen() est facultatif.

+0

@thiya: le calcul de la taille maximale de la mémoire tampon doit prendre en compte la compression. – peterSO