2012-01-03 2 views
1

현재 .NET Framework의 지원없이 표준 C++에 DeflateStream 사용과 관련된 일부 C# 코드를 이식하려고합니다. 이러한 함수의 한 예는 다음과 같습니다.C++에서 DeflateStream을 사용하고 있습니까?

public static byte[] ReadCompressed(this Stream stream) 
{ 
    var reader = new BinaryReader(stream); 
    int len = reader.ReadInt32(); 
    var array = new byte[len]; 
    var ds = new DeflateStream(stream, CompressionMode.Decompress); 
    ds.Read(array, 0, len); 
    ds.Close(); 
    return array; 
} 

위의 코드를 C++로 쉽게 포팅 할 수 있습니까? 감사!

+5

당신 것 zlib (http://zlib.net/)과 같은 제 3 자 라이브러리가 필요하거나 휠 재 발명을 원한다면 직접 수축 알고리즘을 구현하십시오. – Joe

+0

@Joe : C++에서 zlib를 사용하는 방법에 대한 자습서가 있습니까? – derekhh

+1

원래 .NET DeflateStream 클래스로 압축 된 zlib로 데이터의 압축을 풀어야하는 경우 (또는 그 반대) 조심해야합니다. zlib에는 DeflateStream이 생성하지 않는 데이터의 접두사와 접미사가 필요합니다. http://tlzprgmr.wordpress.com/2010/03/17/net-deflatestreamzlib-compatibility/를 참조하십시오. – Ferruccio

답변

4

zlib을 사용할 수 있습니다. C++에서이를 수행하는 가장 쉬운 방법은 Boost wrapper for it을 사용하는 것입니다.

나는 당신의 예는 무엇 완전히 잘 모르겠지만, 여기에 ZLIB 압축 파일을 읽고 (워드 프로세서의 예에서 적응) 표준 출력에 그 내용을 작성하는 방법은 다음과 같습니다

namespace io = boost::iostreams; 

std::ifstream file("hello.z", std::ios_base::binary); 
io::filtering_streambuf<io::input> in; 
in.push(io::zlib_decompressor()); 
in.push(file); 
io::copy(in, std::cout);