Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone TMX映射文件到底是如何基于64编码的?_Iphone_Perl_Cocos2d Iphone_Tmx - Fatal编程技术网

Iphone TMX映射文件到底是如何基于64编码的?

Iphone TMX映射文件到底是如何基于64编码的?,iphone,perl,cocos2d-iphone,tmx,Iphone,Perl,Cocos2d Iphone,Tmx,我正在为iOS编写一个使用.tmx映射文件的游戏。我在应用程序“平铺”中创建映射,然后在它们到达iOS之前的某个时刻,我用Perl解析它们 当我将文件保存为纯XML时,perl很容易解析它们。然而,cocos2d坚持认为这些文件是base64编码的。“平铺”映射编辑器使用这种编码方案保存文件没有问题,iOS可以很好地读取这些文件,但这给我的perl代码带来了问题 出于某种原因,perl中的标准MIME::Base64 decode_Base64()方法在这里没有切中要害——当我解码字符串时,我会

我正在为iOS编写一个使用.tmx映射文件的游戏。我在应用程序“平铺”中创建映射,然后在它们到达iOS之前的某个时刻,我用Perl解析它们

当我将文件保存为纯XML时,perl很容易解析它们。然而,cocos2d坚持认为这些文件是base64编码的。“平铺”映射编辑器使用这种编码方案保存文件没有问题,iOS可以很好地读取这些文件,但这给我的perl代码带来了问题

出于某种原因,perl中的标准MIME::Base64 decode_Base64()方法在这里没有切中要害——当我解码字符串时,我会得到一个或两个二进制字符——菱形框中的问号等等

TMX文件格式的模糊文档使我们不清楚在base64编码之前或之后是否有其他编码可能导致此问题。我查看了编码器的cpp源代码,看到了很多关于Latin1的参考资料,但我无法详细解释发生了什么

我注意到,当我尝试使用MIME::Base64进行自己的测试时,对测试字符串进行编码,然后对其进行解码,编码后的文本与我从TMX文件中看到的文本有很大的不同——例如,我的短字符串Base64编码文本如下所示:

aGVyZSBpcyBhIHNlbnRlbmNl
9QAAAAABAAANAQAAGAEAAA==
但是来自TMX文件的base64编码文本如下所示:

aGVyZSBpcyBhIHNlbnRlbmNl
9QAAAAABAAANAQAAGAEAAA==

关于我在尝试解码类似的字符串时可能尝试的其他方法,有什么建议吗?

我想这可能就是您想要的。它建议首先(如果存在
compression=“gzip”
属性)使用解压,最后使用提取4字节小端整数列表。

谢谢,这非常有用。然而,在base64解码(未压缩)数据之后,根据他们的指示,我似乎仍然缺少一些东西:“从数据流的开始到结束,您可以一次读取每个GID的4个字节。”-但我看到的只是一个破损的小特殊字符,我的文本编辑器甚至不能正确显示-这让我觉得在将base64解码数据后处理为一系列数字方面,我仍然没有得到一些东西。我不是perl的人,所以我不能确切地告诉你该怎么做,但是在base-64解码之后,应该有一个长度可以被4整除的数组或流。您需要一次读取4个字节来创建32位整数(4字节*8位/字节=32)。正如@cjm所指出的,在读取字节时理解endian的属性很重要。多亏了你们两位,我认为剩下的问题只是我需要了解base64编码的细节。