base64 размер крнечных данных
От: _chill Россия  
Дата: 16.09.04 21:14
Оценка:
Подскажите, плз., как подсчитать размер конечных данных в байтах после применения base64 encode...
Re: base64 размер крнечных данных
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.09.04 05:26
Оценка: :))
Здравствуйте, _chill, Вы писали:

_>Подскажите, плз., как подсчитать размер конечных данных в байтах после применения base64 encode...

О-о-о, это оочень сложный и секретный алгоритм. Но, так и быть, я открою тебе тайную формулу.
Дело в том, что при кодировании в base64 каждые 6 бит входных данных превращаются в 8 бит выходных. Это значит, что и каждые 6 байт превращаются в 8. Поэтому тебе надо исходный размер разделить на шесть и умножить на восемь. Если трудно, то можно поделить на три и умножить на четыре. А что делать, когда количество байт не делится на три, спросишь ты? А нихрена особенного не делать. Округлять вверх до целого.
... << RSDN@Home 1.1.4 @@subversion >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: base64 размер крнечных данных
От: _chill Россия  
Дата: 17.09.04 06:56
Оценка:
Здравствуйте, 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 символов не хватает...
Так что? формула не работает????
Re[3]: base64 размер крнечных данных
От: Вадим Никулин Россия Здесь
Дата: 17.09.04 07:18
Оценка:
Здравствуйте, _chill, Вы писали:

Если трудно, то можно поделить на три и умножить на четыре.
_>Ок, я смотрю ты умный... теперь объясни мне такую штуку...

_>int len = ceil((double)src_len * 4/3);//вот это необходимая длина...

_>и есть у меня еще входная строка длиной 308 символов...
_>считаем и получается, что
_>len = ceil(410,66666666) = 411...
_>А на самом деле долно быть 412, бувера в 411 символов не хватает...
_>Так что? формула не работает????

Для особо одаренных: сначала разделить, потом округлить, и только потом умножить.
Re[3]: base64 размер крнечных данных
От: conraddk Россия  
Дата: 17.09.04 07:19
Оценка:
Здравствуйте, _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
Все на свете должно происходить медленно и неправильно...
Re[4]: base64 размер крнечных данных
От: _chill Россия  
Дата: 17.09.04 07:27
Оценка: 1 (1)
Здравствуйте, all.
Спасибо ребята, туплю...

P.S.
Извините, если нагрубил...
Настроение никчерту...
Re[3]: base64 размер крнечных данных
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.09.04 07:31
Оценка:
Здравствуйте, _chill, Вы писали:
_>Так что? формула не работает????
Виноват. Прогнал. Округлять надо до умножения. Т.е.
int len = ceil((double)src_len/3)*4.

А вообще, надо в первоисточники смотреть. В частности, RFC 3548
... << RSDN@Home 1.1.4 @@subversion >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: base64 размер крнечных данных
От: Кодт Россия  
Дата: 17.09.04 08:51
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Виноват. Прогнал. Округлять надо до умножения. Т.е.

S>
S>int len = ceil((double)src_len/3)*4.
S>


А вообще, нафига связываться с плавающей арифметикой?
 int base64_len = (src_len + 2) / 3 * 4;


ЗЫ
Каждые 3 байта превращаются в 4 буквы.
Хвост из 2 байт превращается в 3 буквы и знак =.
Хвост из 1 байта — в 2 буквы и ==.
Вот и вся история.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.