Вы можете обращаться с целочисленным массивом напрямую как (двоичным) символьным буфером и передавать его в функцию сжатия:
char *buffer = reinterpret_cast<char *>(my_int_array);
И точно так же, когда вы распаковываете в символьный буфер, вы можете использовать его как целочисленный массив:
int *array = reinterpret_cast<int *>(my_char_buffer);
Убедитесь, что вы отслеживаете исходную длину целочисленного массива и не обращаетесь к недопустимым индексам.