Опять наговнокодил крч, кодирование/декодирование + возможность использования своего алфавита.
API
int base64_register(unsigned char * alphabet, unsigned char endcode ,struct base64 * base);
int base64_decode(unsigned char * src, size_t src_size,
unsigned char * dst, size_t dst_size, size_t * result_size,struct base64 * vatiant);
int base64_encode(unsigned char * src, size_t src_size,
unsigned char * dst, size_t dst_size, size_t * result_size,struct base64 * vatiant);
Пример
#include <stdio.h>
#include <string.h>
#include "base64.h"
int main(int argc, char **argv)
{
/* prepare input */
unsigned char inp[] = "Hello World!";
size_t inp_size = strlen(inp);
/* prepare ouput */
size_t out_size = inp_size * 1.5; // or ((inp_size / 3) * 4) + 4
unsigned char out[out_size];
/* prepare variable to save data len (can ignore it and set NULL) */
size_t written = 0;
/* set data, if last parametr is NULL used RFC4648 base64 alphabet */
int status = base64_encode(inp,inp_size,out,out_size,&written,NULL);
if(status != BASE64_SUCCESS)
{
fprintf(stderr,"Error: code = %c\n",status);
return status;
}
/*out_size > written size, in this case need set '\0' */
out[written] = '\0';
printf("data = %s size = %d\n",out, written);
return 0;
}
Негодники
Ковыряясь в коде mittorn понял что я со своей Lua
совсем забыл как на Сишечке что-то делать. Реально тупо всё забыл. В качестве тренировки решил хотя бы переписать вот это с Lua
на C
. И блин у меня на тупо переписывание лоб в лоб ушло несколько дней. И то, я не уверен, всё ли у меня правильно. Вот так вот, касаемо основных инструментов нужна периодическая практика, иначе вжух и зобыл. Эх, ладна, пойду гематогенку съем.
Вдруг кому надо (перед использованием перекреститься, мало ли что!)
Если что сегодня пятница, так что, чур я в домике 🏠
Перемещено leave из talks