gpt4 book ai didi

c++ - 从 .tmx (Tiled) 文件解压缩 zlib 数据

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:56 25 4
gpt4 key购买 nike

我正在尝试编写一个 .tmx 加载程序,它将 Tiled map 数据直接加载到我的游戏中。我已经编写了 Base64 解码器并解码了字符串。

但是,解压缩数据后我没有收到任何输出。我将通过示例向您展示,以便您了解问题所在。

.tmx 文件,或者说我尝试使用的代码行,如下所示:

<data encoding="base64" compression="zlib">
eJzt1UEKwCAMBMBUsPXi/7+rH9CjSp2BPeWyEEgiAIA/yT3PIO/GXrdKPXUyY63ZPljPPs7iXp2lxPiffxt7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtGh4aAGc=
</data>

首先,我从 .tmx 文件中获得了 Base64 编码的 zlib 压缩数据字符串:

std::string TmxSample = "eJzt1UEKwCAMBMBUsPXi/7+rH9CjSp2BPeWyEEgiAIA/yT3PIO/GXrdKPXUyY63ZPljPPs7iXp2lxPiffxt7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtGh4aAGc=";

我像这样运行我的 Base64 解码器:

std::string DecodedTmxSample = Base64::decode(TmxSample);

得到

xœíÕA
À ÀT°õâÿ¿«Ð£J=å²H"

我只能假设这是正确的。我已经在维基百科示例中尝试了我的解码器,它给了我正确的输出。因此,我不认为我的 Base64 解码器是错误的。毕竟,我的输出至少应该在解压缩后返回某种垃圾,或者流错误。

我在 zpipe.c 中使用 zlib 库和解压缩示例的复制粘贴版本(名为 int inf(FILE *source, FIle *dest)。对于这个例子,我快速将输出(解码的 tmx 字符串)复制到文件。这是解压缩的代码(同样,主要是复制粘贴)

#define CHUNK 16384
int ret;
unsigned have;
z_stream strm;
unsigned char in[CHUNK];
unsigned char out[CHUNK];

strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = 0;
strm.next_in = Z_NULL;
ret = inflateInit(&strm);

FILE *file;
// Contains decoded data.
file = fopen("testFile", "r");

FILE *dest;
// We write decompressed data to this file.
dest = fopen("testOutFile", "w");

do
{
strm.avail_in = fread(in, 1, CHUNK, file);
strm.next_in = in;

do
{
strm.avail_out = CHUNK;
strm.next_out = out;
ret = inflate(&strm, Z_NO_FLUSH);
have = CHUNK - strm.avail_out;

} while (strm.avail_out == 0);

} while (ret != Z_STREAM_END);

一些注意事项:为简洁起见,我删除了错误检查(示例代码和我的代码有很多)。我在运行期间没有收到任何错误消息。但是,输出文件是空的,我不知道为什么。

最佳答案

试试这个:

do 
{
if ( strm.avail_in == 0 ){
strm.avail_in = fread(in, 1, CHUNK, file);
strm.next_in = in;
}
strm.avail_out = CHUNK;
strm.next_out = out;

ret = inflate(&strm, Z_SYNC_FLUSH);
have = CHUNK - strm.avail_out;

fwrite ( out, 1, have, dest ); //you forgot this step

} while (ret != Z_STREAM_END);

关于c++ - 从 .tmx (Tiled) 文件解压缩 zlib 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com