История изменений
Исправление firkax, (текущая версия) :
Как ты умудрился раздуть 20-строчный код на аж целую репу?
Вот энкодер правда тут входная строка фиксированной длины (и у выходной паддинга соответственно нет), но даже если сделать полную поддержку - оно не сильно длиннее будет.
static void b64hash(char *dest, uchar const *hash) {
char const b64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567
89_-";
size_t p;
for(p=0; p<10; p++,dest+=4,hash+=3) {
dest[0] = b64[hash[0] & 63];
dest[1] = b64[(hash[0] >> 6) | ((hash[1] & 15) << 2)];
dest[2] = b64[(hash[1] >> 4) | ((hash[2] & 3) << 4)];
dest[3] = b64[(hash[2] >> 2) & 63];
}
dest[0] = b64[hash[0] & 63];
dest[1] = b64[(hash[0] >> 6) | ((hash[1] & 15) << 2)];
dest[2] = b64[(hash[1] >> 4)];
}
Исправление firkax, :
Как ты умудрился раздуть 20-строчный код на аж целую репу?
Вот энкодер правда тут входная строка фиксированной длины, но даже если сделать полную поддержку - оно не сильно длиннее будет.
static void b64hash(char *dest, uchar const *hash) {
char const b64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567
89_-";
size_t p;
for(p=0; p<10; p++,dest+=4,hash+=3) {
dest[0] = b64[hash[0] & 63];
dest[1] = b64[(hash[0] >> 6) | ((hash[1] & 15) << 2)];
dest[2] = b64[(hash[1] >> 4) | ((hash[2] & 3) << 4)];
dest[3] = b64[(hash[2] >> 2) & 63];
}
dest[0] = b64[hash[0] & 63];
dest[1] = b64[(hash[0] >> 6) | ((hash[1] & 15) << 2)];
dest[2] = b64[(hash[1] >> 4)];
}
Исходная версия firkax, :
Как ты умудрился раздуть 10-20-строчный код на аж целую репу?