У меня есть случай, когда мне нужно сжать много часто небольших значений. Таким образом, я сжимаю их с байтовой кодировкой переменной длины (ULEB128, чтобы быть конкретным):
size_t
compress_unsigned_int(unsigned int n, char* data)
{
size_t size = 0;
while (n > 127)
{
++size;
*data++ = (n & 127)|128;
n >>= 7;
}
*data++ = n;
return ++size;
}
Есть ли более эффективный способ сделать это (возможно, используя SSE)?
Изменить: после этого сжатия результат сохраняется в data
, беря size
байты. Затем функция сжатия вызывается в следующем неподписанном int.