2011-07-10 3 views
3

私は、.tmxマップファイルを使用するiOS用のゲームを作成しています。私はアプリケーション 'Tiled'で地図を作成していますが、iOSに入る前のある時点でPerlで解析しています。TMXマップファイルはどのようにbase_64エンコードされていますか?

ファイルをまっすぐなXMLとして保存すると、perlがファイルを解析するための手がかりになります。しかし、cocos2dはファイルがbase64でエンコードされていると主張しています。 'Tiled'マップエディタでは、このエンコーディングスキームを使用してファイルを保存するのに問題はなく、iOSはそれらを正しく読み込みますが、私のperlコードに問題があります。

何らかの理由で、perlの標準MIME :: Base64 decode_base64()メソッドがここでマスタードを切り詰めていません。私が文字列をデコードするとき、私は1つまたは2つのバイナリ文字を取得します。

TMXファイル形式のあいまいなドキュメントでは、この問題を引き起こす可能性のあるbase64エンコーディングの前後に他のエンコーディングがあるかどうかは不明です。私はエンコーダ用のcppソースを見て、Latin1への参照をたくさん見ましたが、詳細については解読できませんでした。

私は、MIME :: Base64で独自のテストを行い、テストストリングをエンコーディングしてデコードすると、エンコードされたテキストがTMXファイルから出てくるものとは劇的に異なっていることに気付きました。短い文字列のための私のbase64でエンコードされたテキストは、次のようになります。

aGVyZSBpcyBhIHNlbnRlbmNl 

しかし、TMXファイルからのbase64でエンコードされたテキストは、次のようになります。私は試してみてください他に何の

9QAAAAABAAANAQAAGAEAAA== 

任意の提案そのような文字列をデコードしようとしていますか?

答えて

3

私はthis pageがあなたが探しているかもしれないと思います。最初にdecode_base64、次に(compression="gzip"属性がある場合)、gunzipを使用して解凍し、最後にunpack('V*', $data)を使用して4バイトのリトルエンディアン整数のリストを抽出することをお勧めします。

+0

ありがとう、それは非常に役に立ちます。しかし、「解凍された」データをbase64で解読した後も、データストリームの最初から最後まで、各GIDごとに4バイトずつ読むことができます。 - しかし、私が見ているのは、テキストエディタでは正しく表示されない小さな文字があります。これは、base64でデコードされたデータを一連の数字に後処理することに関して、 。 – todd412

+0

私はperlの人ではありませんので、何をすべきか正確には言えませんが、base-64のデコード後に4で割り切れる長さの配列やストリームが必要です。 32ビット整数(4バイト* 8ビット/バイト= 32)を作成する時間です。バイトを@cjmとして読むときのエンディアンを理解することは重要です。 –

+0

お互いのおかげで、残りの問題は、base64エンコーディングの詳細について学ぶ必要があると思います。 – todd412

関連する問題