Здравствуйте, _chill, Вы писали:
_>Подскажите, плз., как подсчитать размер конечных данных в байтах после применения base64 encode...
О-о-о, это оочень сложный и секретный алгоритм. Но, так и быть, я открою тебе тайную формулу.
Дело в том, что при кодировании в base64 каждые 6 бит входных данных превращаются в 8 бит выходных. Это значит, что и каждые 6 байт превращаются в 8. Поэтому тебе надо исходный размер разделить на шесть и умножить на восемь. Если трудно, то можно поделить на три и умножить на четыре. А что делать, когда количество байт не делится на три, спросишь ты? А нихрена особенного не делать. Округлять вверх до целого.
... << RSDN@Home 1.1.4 @@subversion >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, _chill, Вы писали:
_>>Подскажите, плз., как подсчитать размер конечных данных в байтах после применения base64 encode... S>О-о-о, это оочень сложный и секретный алгоритм. Но, так и быть, я открою тебе тайную формулу. S>Дело в том, что при кодировании в base64 каждые 6 бит входных данных превращаются в 8 бит выходных. Это значит, что и каждые 6 байт превращаются в 8. Поэтому тебе надо исходный размер разделить на шесть и умножить на восемь. Если трудно, то можно поделить на три и умножить на четыре. А что делать, когда количество байт не делится на три, спросишь ты? А нихрена особенного не делать. Округлять вверх до целого.
Ок, я смотрю ты умный... теперь объясни мне такую штуку...
int len = ceil((double)src_len * 4/3);//вот это необходимая длина...
и есть у меня еще входная строка длиной 308 символов...
считаем и получается, что
len = ceil(410,66666666) = 411...
А на самом деле долно быть 412, бувера в 411 символов не хватает...
Так что? формула не работает????
Если трудно, то можно поделить на три и умножить на четыре. _>Ок, я смотрю ты умный... теперь объясни мне такую штуку...
_>int len = ceil((double)src_len * 4/3);//вот это необходимая длина... _>и есть у меня еще входная строка длиной 308 символов... _>считаем и получается, что _>len = ceil(410,66666666) = 411... _>А на самом деле долно быть 412, бувера в 411 символов не хватает... _>Так что? формула не работает????
Для особо одаренных: сначала разделить, потом округлить, и только потом умножить.
Здравствуйте, _chill, Вы писали:
S>>...можно поделить на три и умножить на четыре. А что делать, когда количество байт не делится на три, спросишь ты? А нихрена особенного не делать. Округлять вверх до целого.
_>Ок, я смотрю ты умный... теперь объясни мне такую штуку...
_>int len = ceil((double)src_len * 4/3);//вот это необходимая длина... _>и есть у меня еще входная строка длиной 308 символов... _>считаем и получается, что _>len = ceil(410,66666666) = 411... _>А на самом деле долно быть 412, бувера в 411 символов не хватает... _>Так что? формула не работает????
Работает. См. выделенное.
308/3 = 102,(6)
ceil(102,(6)) = 103
103*4 = 412
Д.К. << RSDN@Home 1.1.4 beta 2>> слушаем silent
Все на свете должно происходить медленно и неправильно...