LINUX.ORG.RU

История изменений

Исправление 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-строчный код на аж целую репу?