質問
ASCII85には、エンコードの最大長を取得する機能があります MaxEncodedLen()
.
Base64のように、デコード時の長さを取得するにはあまりにも関数が必要だと思います。
解決
GOを計算する関数は次のとおりです package ascii85
MaxDecodedLen()
にとって n
エンコードされたバイト。
func MaxDecodedLen(n int) int {
const binWordLen = 4
return n * binWordLen
}
エンコードされていないグループの4バイトすべてがゼロの場合、それらは単一のバイト、文字で表されます z
, 、5つの感嘆符ではなく(!!!!!
)。いくつかの実装では、エンコードされていないスペースのグループが単一の文字で表される場合があります y
.
ascii85.Decode()
, 、 ようではない ascii85.Encode()
, 、消費されるバイト数があります(nsrc
) と flush
書かれた多数のバイトに加えて、パラメーター(ndst
)パラメーター。これにより、プログラマーは複数のブロックまたは単一のブロックごとにデコードできます。したがって、より少ない宛先バッファー MaxDecodedLen()
使用することができます。
他のヒント
私の意見では、MaxEncodedLen()をエンコードすることは、エンコードされた出力(つまり宛先バッファサイズ)を保持するために必要なバイト数を知るために必須です。
デコードの場合、発信者は宛先バッファーのサイズが低い場合でも、ソースバッファーに等しいサイズの宛先バッファーを渡すことができます。
または、エンコードとデコードの実行コンテキスト/範囲が同じ場合、元のソースIEプレーンエンコードバッファサイズを使用できます。したがって、予想される関数、maxdecodedlen()はオプションです。