6

16 進値として NSData の任意のブロックがある場合、アーカイブまたはシリアル化される前にオブジェクトが何であったかを判断する方法はありますか? いくつかの推測とチェックの方法は気にしませんが、正しい方向へのポインタが必要です。

16 進数を含む NSData オブジェクトがあります。NSData のどのメソッドを調べる必要がありますか? 他にも試してみたいクラスはありますか

人々を怖がらせて答えさせたくありませんが、Cocoa Touch クラスを使用してエンコードされた可能性のあるゲーム データのファイルがあります。データを 16 進エディタで表示すると、意味不明な文字とユーザー名が表示されるため、アーカイブまたはエンコードされたある種のオブジェクトであると思われます。16 進エディタから 16 進をサンプル プロジェクトにコピーしました。これを使用して、データのアーカイブを解除しようとしています。

これが 3D 形式に関連しているとは思いません。ファイル拡張子は任意です。

これがデータです。翻訳で失われないことを願っています:

'µköXN[ÎÀü÷h/F9ó9Vìñ°ceE¸z¶=Hmoshbermú«ó¼Ppù#ÝVÔ=4â®L,K;Êç;ASÀ&Ë÷ëÓ%È;Úf¬G}tmQ;µéüø_87´y©ã©!߶óQòAçÛl©âSG4S½3ýJת9äô¡wxiD²M¼ÏB]39øþ:óñ7ª¾÷躣È3Ï¢ÍEFÍ¢ª»r]BmÁ'Ò+åygÞÅQ?luó>÷ú¼è6¸|}[¼[¶Ñ¦g!\OÎÒJSE..pSß&_ÈEäø)6òëó¨¼2¶ð°æà`ï7Ë=Ã¥:cƧ=L4qG-"µ(ÐÝïß ÓãXkÀ4fzæ·p\ññT<tu¥Æ©;Ìn4£³Ï¢ÌFåG´

そして対応する16進数:

27 B5 6B F6 01 00 00 00 58 4E 5B CE C0 FC F7 68 2F 46 86 87 83 39 F3 39 9E 56 EC F1 B0 63 9E 65 45 B8 7A B6 3D 07 99 48 6D 6F 73 68 62 65 72 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 86 FA 03 0E AB F3 BC 0B 50 70 F9 23 DD 87 56 03 D4 3D 34 90 E2 AE 4C 2C 94 9E 8E 15 4B 0C 83 8C 3B 03 CA E7 3B 1B 41 53 C0 26 04 CB F7 EB D3 25 C8 3B DA 66 8A AC 47 7D 8A 7F 74 6D 51 3B B5 19 E9 FC F8 5F 38 37 B4 11 0C 79 A9 12 E3 A9 21 DF B6 F3 51 F2 41 E7 DB 85 02 9F 6C A9 E2 53 47 1F 34 86 53 BD 33 FD 4A D7 AA 39 C3 A4 F4 A1 77 78 69 44 B2 4D BC CF 42 5D 33 39 F8 FE 97 3A 81 F3 F1 10 37 AA BE 86 91 F7 1F E8 83 BA A3 C8 33 CF 1D A2 CD 45 7F 46 1F CD A2 AA BB 1A 72 5D 42 02 6D C1 0F 27 D2 2B E5 0B 79 67 DE C5 1A 51 3F 14 6C 75 F3 3E F7 FA BC E8 36 8E B8 7C 02 1C 7D 01 00 92 8C 19 5B BC 5B B6 D1 A6 67 7F 21 5C 84 13 4F CE 0C D2 4A 53 19 82 45 1B 2E 2E 96 70 53 DF 26 5F C8 1C 45 8F E4 F8 29 36 F2 EB 9D 95 F3 A8 BC 32 B6 F0 B0 E6 91 98 1A E0 99 60 EF 37 CB 3D C3 A5 3A 63 0C C6 A7 3D 4C 34 71 47 2D 22 B5 28 D0 DD EF DF 09 D3 E3 58 6B C0 17 34 66 7A E6 B7 70 5C F1 F1 54 3C 74 94 75 A5 C6 15 A9 9E 14 3B CC 15 10 83 6E 34 A3 B3 CF 0F A2 9C CC 8E 46 8C E5 00 00 47 B4 17 05 00 00 00 00

誰かがこれを理解するのを手伝ってくれるなら、それは大歓迎です。

4

2 に答える 2

2

NSData の任意のブロックを 16 進数値として持っている場合、アーカイブまたはシリアル化される前にオブジェクトが何であったかを判断する方法はありますか?

あまり。これは、UTI、拡張子、MIME タイプを使用せずに任意のファイルを正しく読み取るのと同じくらい「些細なこと」です。もちろん、プログラムはこれらすべてのファイル/フォーマットの読み取りをサポートする必要もあります。

いくつかの推測とチェックの方法は気にしませんが、正しい方向へのポインターが必要です。

信じられないほど難しいタスクが必要ない場合は、問題/入力を絞り込む必要があります。

16 進数を含む NSData オブジェクトがあります。NSData のどのメソッドを調べる必要がありますか?

それは単なるlengthバイトのデータブロブです。どこから来たのかわからない場合は、何でも表すことができます。

他にも試してみたいクラスはありますか?

おそらく、NSCoder または別のシリアライザー/アーカイバーを介してすべてのデータを保存することから始めることになるでしょう。これは、内省を提供し、独自の情報を入力するためのサポートを提供します (UTI または MIME タイプに相当します)。

編集:

人々を怖がらせて答えさせたくありませんが、Cocoa Touch クラスを使用してエンコードされた可能性のあるゲーム データのファイルがあります。データを 16 進エディタで表示すると、意味不明な文字とユーザー名が表示されるため、アーカイブまたはエンコードされたある種のオブジェクトであると思われます。16 進エディタから 16 進をサンプル プロジェクトにコピーしました。これを使用して、データのアーカイブを解除しようとしています。

これらの API を使用すると、データを複数の方法で表すことができます。おそらく、1) プロプライエタリなファイル形式から 2) キー付きアーカイブのドメイン内で何かに直面しているでしょう。

自明でないデータ表現では、後者の方が簡単です。アーカイブを解除したときに使用できない objc クラスを定義する必要があります。その場合、いくつかのサンプル表現は、(従来の実装で) 必要なデータ構造の大まかな概要を提供します。アンアーカイバーがそれを開くことができる場合、NSDictionary に似たアーカイブである可能性もあります。アーカイブは、Cocoa のメンバーにマップされたキーと値に依存することが多いため、これは他の言語よりも簡単な問題です。

編集2:

このファイルは、Draw Something ディレクトリから取得されました。それは gamedata.i3d と呼ばれます

(肩をすくめる)

于 2012-04-16T04:32:16.377 に答える
0

使っNSKeyedUnarchiverて読んでみてください。NSArray、NSDictionary、NSString などの標準の Foundation コンテナーだけを使用してデータを格納することは珍しくありません。カスタム クラスが関係している場合、これは明らかに機能しませんが、15 分間試してみるだけの価値があるかもしれません。

于 2012-04-16T15:24:53.253 に答える