Задать вопрос

Как определить параметры lzma компрессии по выводу информации после вызова?

Есть простой код написанные на луа
ekau.lzma_compress("test", function(data) print("data->", #data, #util.Compress("test"), data == util.Compress("test")) end)...


Вывод выражения
data-> 27 22 false


Очевидно что util.Compress выдает меньшую длинну вывода компрессии, как узнать, и возможно ли узнать параметры компресии функции util.Compress без реверс инженерии? Нужно изменить функцию lzma_compress, которая написана на С++, так, что бы результаты вывода совпадали.

Вот код самой компрессии на С++
int  
simpleCompress(elzma_file_format format, const unsigned char * inData,  
				size_t inLen, unsigned char ** outData,  
				size_t * outLen)  
{  
	int rc;  
	elzma_compress_handle hand;  
	
	/* allocate compression handle */  
	hand = elzma_compress_alloc();  
	assert(hand != NULL);  
	
	/* configure the compression run with mostly default parameters  */   
	rc = elzma_compress_config(hand, ELZMA_LC_DEFAULT,  
								ELZMA_LP_DEFAULT, ELZMA_PB_DEFAULT,  
								5, (1 << 24) /* 1mb */,  
								format, inLen);  
	
	/* fail if we couldn't allocate */    
	if (rc != ELZMA_E_OK) {  
		elzma_compress_free(&hand);  
		return rc;  
	}  
	
	/* now run the compression */  
	{  
		/* set up the context structure that will be passed to 
			* stream callbacks */    
		struct dataStream ds;  
		ds.inData = inData;  
		ds.inLen = inLen;  
		ds.outData = NULL;  
		ds.outLen = 0;  
	
		/* run the streaming compression */   
		rc = elzma_compress_run(hand, inputCallback, (void *) &ds,  
								outputCallback, (void *) &ds, NULL, NULL);  
			
		if (rc != ELZMA_E_OK) {  
			if (ds.outData != NULL) free(ds.outData);  
			elzma_compress_free(&hand);  
			return rc;  
		}  
	
		*outData = ds.outData;  
		*outLen = ds.outLen;  
	}  
	
	return rc;  
}
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы