Реализация алгоритма base64 - C (СИ)
Формулировка задачи:
Я скачал реализацию алгоритма кодирования base64:
а вызов следующий:
но вместо вывода MTIz выводится что-то типа MTIzAAAAAAAAAA==
в чем может проблема?
static const char basis_64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int Base64encode_len(int len)
{
return ((len + 2) / 3 * 4) + 1;
}
int Base64encode(char *encoded, const char *string, int len)
{
int i;
char *p;
p = encoded;
for (i = 0; i < len - 2; i += 3) {
*p++ = basis_64[(string[i] >> 2) & 0x3F];
*p++ = basis_64[((string[i] & 0x3) << 4) |
((int) (string[i + 1] & 0xF0) >> 4)];
*p++ = basis_64[((string[i + 1] & 0xF) << 2) |
((int) (string[i + 2] & 0xC0) >> 6)];
*p++ = basis_64[string[i + 2] & 0x3F];
}
if (i < len) {
*p++ = basis_64[(string[i] >> 2) & 0x3F];
if (i == (len - 1)) {
*p++ = basis_64[((string[i] & 0x3) << 4)];
*p++ = '=';
}
else {
*p++ = basis_64[((string[i] & 0x3) << 4) |
((int) (string[i + 1] & 0xF0) >> 4)];
*p++ = basis_64[((string[i + 1] & 0xF) << 2)];
}
*p++ = '=';
}
*p++ = '\0';
return p - encoded;
}int main()
{
int len=0;
char buf[20] = "123";
char result_buf[100];
//len = dllfunc2(sizeof(buf))+2;
len = Base64encode_len(sizeof(buf));
Base64encode(result_buf,buf, len);
printf(result_buf);
return 0;
}Решение задачи: «Реализация алгоритма base64»
textual
Листинг программы
len = Base64encode_len(strlen(buf)); Base64encode(result_buf, buf, strlen(buf));
Объяснение кода листинга программы
len- длина результата кодирования в base64, вычисляется с помощью функции Base64encode_lenresult_buf- буфер для хранения результата кодированияbuf- исходная строка, которую необходимо закодировать в base64strlen(buf)- длина исходной строки