我想压缩一个字符串并获取压缩数据的大小...但不管我传递给我的函数的字符串是什么,它总是返回相同的结果:39。非常感谢任何建议。
int compressedLength(char * source){
ostringstream oss;
int blockSize100k = 9;
int verbosity = 0;
int workFactor = 30; // 0 = USE THE DEFAULT VALUE
unsigned int sourceLength = sizeof(source);
unsigned int destLength = 1.01 * sourceLength + 600; // Official formula, Big enough to hold output. Will change to real size.
char *dest = (char*)malloc(destLength);
int returnCode = BZ2_bzBuffToBuffCompress( dest, &destLength, source, sourceLength, blockSize100k, verbosity, workFactor );
if (returnCode == BZ_OK)
{
free(dest);
return destLength;
}
else
{
free(dest);
cout << " Can't get compressed length. " << "Error code:" << returnCode;
return returnCode;
}
}
答案 0 :(得分:1)
您的错误在这里:
unsigned int sourceLength = sizeof(source);
总是4或8(取决于你的机器是否有32位或64位指针),而不是你发送的数据缓冲区的实际长度。如果你发送的数据缓冲区是一个C字符串,那么您需要使用strlen(source)
或strlen(source) + 1
,具体取决于您是否要包含终止NUL。
如果缓冲区不是一个C字符串,那么你需要将缓冲区的实际大小传递给compressedLength()
函数,因为它无法找到它的大小