http://www.quicklz.com/ по идее должна существенно быстрее zlib'а сжимать. Зависит от того, что тебе ценнее: скорость или процент сжатия. --- Сообщение объединено, 3 дек 2020 --- https://github.com/lz4/lz4 должен быть еще быстрее, наверное.
Такс, я маленько торомзнул с флагами COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM Сжимает с 40кб до 5кб Результат хороший, сжимает быстро Трабл был в том, что я непривильно определял конечный сжатый размер буфера Одним словом сжал и когда обратно писал в файл сжатые данные - размер некорректно передавлся Там была переменная - PULONG FinalCompressedSize, где после RtlCompressBuffer передается конечный размер сжатого буфера А я там lstrlenA юзал, переобразования делал и прочее На серевере разжал с помощью петона - кроссплатформ же Всем спасибо за фидбек Избавился от посторонних либ. Решение кстати, грамотное(функция имеется ввиду). Мало весит, кроссплатформ, сжимает хорошо, без COM и прочее
Rel, я подумал, что он виндовый Апи заюзал , в любом случае, когда весь код зависит от виндового апи, уже не говорят о кроссплатформенности
если таргет - вендовые сервера, там есчо в system32/inetsrv gzip.dll лежит. хидеров от него я не нашёл, слегка крутанул (всё на экспортах): DWORD InitCompression(); DWORD CreateCompression(HANDLE *pgzip, BOOL some = TRUE); BOOL DestroyCompression(HANDLE *pgzip); DWORD Compress(HANDLE gzip, void *srcbuf, unsigned int srcbufsz, void *dstbuf, unsigned int dstbufmax, unsigned int *pdwProcessedSrcBytes, unsigned int *pdwEncodedSize, void *unk0_0x0 = NULL);
все верно, заюзал rtldecompressbuffer из ntdll.dll Нежелательно дергать такое из ntdll, но у меня вызовы хешированы и т.д. То, что Рел скинул - это и хотел заюзать (если у меня панель на линуксе будет), но у меня потенциально будет hvnc, которому лучше по порту выходить к холдеру. Так что склоняюсь панель на венде сперва такое сделал, но суппорт овер вен 8 и сервер 12. Такое себе решение канеш
Немного почищенный PAQ8: https://github.com/Vicshann/Common/tree/master/PAQ8 От CRT точно не зависит, может и WinAPI не использует. Для сжатия : Код (C++): NPAQ8::MSTRM SrcBuf; NPAQ8::MSTRM DstBuf; unsigned long Size = 0; SrcBuf.AssignFrom(Data, DataSize); int res = NPAQ8::strm_compress(1, SrcBuf, DstBuf); void* Buffer = DstBuf.GetBuffer(&Size);
Полезно Возьму на примету Ток под него надо найти скрипт на петоне (C&C будет на петоне). В моем случае вендовый апи идеально подходит