zlibについて – プログラミング – Home

通知
すべてクリア

[解決済] zlibについて


yuki
 yuki
(@yuki)
ゲスト
結合: 23年前
投稿: 39
Topic starter  

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のソースをそのまま、スタテックリンクして行っています。

どなたか、教えて下さい。
宜しくお願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

なんか zlib の使い方をちゃんと理解していないような気がします。
ここで短い文面で説明するより、配布アーカイブ中の example.c を
読むほうが理解が早いでしょう。

deflate(&z, Z_FINISH); が無い
deflateEnd(&z); が無い


返信引用
yuki
 yuki
(@yuki)
ゲスト
結合: 23年前
投稿: 39
Topic starter  

ありがとうございます。
もう一度、見直してみます。


返信引用
yuki
 yuki
(@yuki)
ゲスト
結合: 23年前
投稿: 39
Topic starter  

できました。ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました