2012-01-03 31 views
1

私は現在、.NETフレームワークのサポートなしでDeflateStreamの使用を含むC#コードを標準C++に移植しようとしています。そのような関数の一例は次のとおりです:DeflateStreamをC++で使用していますか?

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/)のようなサードパーティライブラリを必要とするか、ホイールの再発明が好きな人は、自分自身でdeflateアルゴリズムを実装してください。 – 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); 
関連する問題