zlibについて、教えて下さい。
現在、以下のようにバッファのデータを圧縮し、再度、解凍するとエラーに
なってしまいます。
<圧縮時>
z_stream m_z;
m_z.zalloc = Z_NULL;
m_z.zfree = Z_NULL;
m_z.opaque = Z_NULL;
m_z.next_in = Z_NULL;
m_z.avail_in = 0;
iStatus = deflateInit(&m_z, Z_DEFAULT_COMPRESSION);
m_z.next_in = (unsigned char*)pIn; // 入力バッファのポインタ
m_z.avail_in = iLen; // 入力バッファ中のデータのバイト数
m_z.next_out = (unsigned char*)m_Buffer; // 出力ポインタ
m_z.avail_out = 1000; // 出力バッファのサイズ
iStatus = deflate(&m_z, Z_NO_FLUSH); // 圧縮:通常 第2引数は Z_NO_FLUSH
pIn = AAAAABBBBBCCCCCDDDDDEEEEEFFFFF;
iLen = 30;
このときは、正常にできました。(iStatusの値は、正常)
m_Bufferには、圧縮されたデータが入り、バイト数は、24バイトになりました。
このデータをそのまま、解凍しようとするとエラーになってしまいます。
<解凍時>
z_stream m_z;
m_z.zalloc = Z_NULL;
m_z.zfree = Z_NULL;
m_z.opaque = Z_NULL;
m_z.next_in = Z_NULL;
m_z.avail_in = 0;
iStatus = inflateInit(&m_z);
m_z.next_in = (unsigned char*)m_Buffer; // 入力バッファのポインタ
m_z.avail_in = iLen; // 入力バッファ中のデータのバイト数
m_z.next_out = (unsigned char*)m_Buffer2; // 出力ポインタ
m_z.avail_out = 1000; // 出力バッファのサイズ
iStatus = inflate(&m_z, Z_NO_FLUSH);
このときは、iStatus=-5 (Data Error)
m_Bufferには、先程の圧縮されたデータ、iLen=24バイトです。
m_Buffer2の内容は、AAAAABBBBBCCCCCDBBBC(・・・となってしまいます。
msgの内容は、invalid distance too far backとなります。
zlibは、1.2.1です。VC++ 6.0 です。
zlibのソースをそのまま、スタテックリンクして行っています。
どなたか、教えて下さい。
宜しくお願いします。
なんか zlib の使い方をちゃんと理解していないような気がします。
ここで短い文面で説明するより、配布アーカイブ中の example.c を
読むほうが理解が早いでしょう。
deflate(&z, Z_FINISH); が無い
deflateEnd(&z); が無い
ありがとうございます。
もう一度、見直してみます。
できました。ありがとうございます。