C++ lzma从存储器c+压缩/解压缩+;
我有一个代码在工作,但我对结果并不完全满意,所以我想我可以在这里问一些问题 以下是我的两项职能:C++ lzma从存储器c+压缩/解压缩+;,c++,7zip,lzma,C++,7zip,Lzma,我有一个代码在工作,但我对结果并不完全满意,所以我想我可以在这里问一些问题 以下是我的两项职能: void compress(string nameSrc, string nameDst){ ifstream input; input.open(nameSrc,fstream::in | fstream::binary); size_t propsSize = LZMA_PROPS_SIZE; size_t srcLen = getLength(input);
void compress(string nameSrc, string nameDst){
ifstream input;
input.open(nameSrc,fstream::in | fstream::binary);
size_t propsSize = LZMA_PROPS_SIZE;
size_t srcLen = getLength(input);
size_t dstLen = srcLen; //??? no idea how to know to right value here
unsigned char* src = new unsigned char[srcLen];
unsigned char* dst = new unsigned char[dstLen + propsSize];
input.read((char*)src, srcLen);
int res = LzmaCompress(
&dst[LZMA_PROPS_SIZE], &dstLen,
src, srcLen,
dst, &propsSize,
-1, 0, -1, -1, -1, -1, -1);
delete [] src;
input.close();
ofstream output(nameDst, ios::binary);
output.write((char*)dst, dstLen + propsSize);
delete [] dst;
}
以及:
谢谢。使用以下功能获取目的地大小:
INT32
EFIAPI
LzmaGetInfo(
CONST VOID *Source,
UINT32 SourceSize,
UINT32 *DestinationSize
)
{
UInt64 DecodedSize;
ASSERT(SourceSize >= LZMA_HEADER_SIZE); (void)SourceSize;
DecodedSize = GetDecodedSizeOfBuf((UINT8*)Source);
*DestinationSize = (UINT32)DecodedSize;
return ERR_SUCCESS;
}
使用以下函数获取目标大小:
INT32
EFIAPI
LzmaGetInfo(
CONST VOID *Source,
UINT32 SourceSize,
UINT32 *DestinationSize
)
{
UInt64 DecodedSize;
ASSERT(SourceSize >= LZMA_HEADER_SIZE); (void)SourceSize;
DecodedSize = GetDecodedSizeOfBuf((UINT8*)Source);
*DestinationSize = (UINT32)DecodedSize;
return ERR_SUCCESS;
}
我认为可以将源文件的长度保存到压缩文件中。 解压时,可以通过压缩文件读取源文件的长度 当然,您可以使用它进行压缩,这是我多次搜索的结果 Dslen=LZMA_PROPS_SIZE+srcLen+srcLen/3+128
我认为可以将源文件的长度保存到压缩文件中。 解压时,可以通过压缩文件读取源文件的长度 当然,您可以使用它进行压缩,这是我多次搜索的结果 Dslen=LZMA_PROPS_SIZE+srcLen+srcLen/3+128
那么,这些函数是什么,它们来自哪里?有关于它们的文件吗?虽然我可以想象后处理的大小可能是未知的(特别是对于压缩),但压缩的数据很可能包括应该很容易提取的原始大小。压缩算法的文档和解释还应该让您了解
numThreads
参数是否有用(一些压缩/解压缩算法本质上是顺序的,不能并行化)。它们来自LZMA SDK()。是的,一旦数据被压缩,我就可以知道大小了。我的问题是在此之前我必须分配内存。那么,这些Lzma*ompress()
函数是什么,它们来自哪里?有关于它们的文件吗?虽然我可以想象后处理的大小可能是未知的(特别是对于压缩),但压缩的数据很可能包括应该很容易提取的原始大小。压缩算法的文档和解释还应该让您了解numThreads
参数是否有用(一些压缩/解压缩算法本质上是顺序的,不能并行化)。它们来自LZMA SDK()。是的,一旦数据被压缩,我就可以知道大小了。我的问题是在此之前我必须分配内存。