احصل على طول لفك تشفير ASCII85
سؤال
ASCII85 لديه وظيفة للحصول على الحد الأقصى لطول التشفير MaxEncodedLen()
.
أعتقد أنه ينبغي أن يكون لها وظيفة للغاية للحصول على الطول عند فك التشفير كما هو الحال في Base64.
المحلول
إليك وظيفة لحساب GO package ascii85
MaxDecodedLen()
إلى عن على n
بايت مشفرة.
func MaxDecodedLen(n int) int {
const binWordLen = 4
return n * binWordLen
}
إذا كانت جميع البايتات الأربعة لمجموعة غير مشفرة صفرًا ، يتم تمثيلها بايت واحد ، الشخصية z
, ، بدلاً من خمس نقاط تعجب (!!!!!
). في بعض التطبيقات ، يمكن تمثيل مجموعة غير مشفرة من المساحات y
.
ascii85.Decode()
, ، على عكس ascii85.Encode()
, ، لديه عدد من البايتات المستهلكة (nsrc
) و flush
المعلمات ، بالإضافة إلى عدد من البايتات المكتوبة (ndst
) المعلمة ، والتي تسمح للمبرمج بفك تشفير كتل متعددة أو قطعة قطعة واحدة على حدة. لذلك ، مخزن مؤقت للوجهة أقل من MaxDecodedLen()
يمكن استخدامها.
نصائح أخرى
في رأيي ، أثناء تشفير MaxEncodedLen () أمر إلزامي لمعرفة عدد البايتات المطلوبة للاحتفاظ بالإخراج المشفر (أي حجم المخزن المؤقت للوجهة).
حيث في حالة فك التشفير ، يمكن للمتصل تمرير المخزن المؤقت للوجهة من الحجم يساوي المخزن المؤقت للمصدر على الرغم من أن المخزن المؤقت الوجهة يمكن أن يكون حجمه أقل.
بدلاً من ذلك ، يمكننا استخدام المصدر الأصلي ، أي حجم المخزن المؤقت غير المشفر ، إذا كان سياق/نطاق التنفيذ للترميز وفك التشفير هو نفسه. وبالتالي فإن الوظيفة المتوقعة ، maxDecodedLen () اختيارية.