Из вашего вопроса мне было непонятно, хотите ли вы предварительно добавить длину в VB, чтобы она подходила для непосредственного использования qUncompress, или вы хотели использовать данные, полученные в VB, как есть сейчас, и добавить длину в C ++ перед вызовом qUncompress.
Майк G опубликовал VB решение. Если вы хотите сделать это в C ++, у вас есть два варианта: либо добавить длину в начале QByteArray, либо напрямую вызвать распаковку zlib. В обоих случаях хорошим источником справки является источник Qt для qCompress и qUncompress (corelib / tools / qbytearray.cpp).
Вот как qCompress добавляет длину (nbytes) в bazip, сжатые данные:
bazip[0] = (nbytes & 0xff000000) >> 24;
bazip[1] = (nbytes & 0x00ff0000) >> 16;
bazip[2] = (nbytes & 0x0000ff00) >> 8;
bazip[3] = (nbytes & 0x000000ff);
где bazip - результат QByteArray
В качестве альтернативы, если вы хотите вызвать uncompress напрямую, вместо использования оболочки qUncompress, он использует вызов
baunzip.resize(len);
res = ::uncompress((uchar*)baunzip.data(), &len,
(uchar*)data+4, nbytes-4);
где baunzip - это QByteArray. В вашем случае вы бы сбросили +4 и -4, так как к вашим данным не добавлена длина.