У меня есть случай, когда мне нужно сжать много часто маленьких значений. Поэтому я сжимаю их с помощью байтовой кодировки переменной длины (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)?
Edit: После этого сжатия результат сохраняется в data
, занимая size
байт. Затем функция сжатия вызывается на следующем unsigned int.