解码NSData的任意块?

时间:2012-04-16 03:58:31

标签: iphone objective-c ios nsdata archiving

如果我有一个NSData的任意块作为十六进制值,有没有办法确定对象在归档或序列化之前可能是什么?我不介意一些猜测和检查方法,但我需要一些正确方向的指针。

我有一个带有一些十六进制的NSData对象。我应该看一下NSData的哪些方法?是否还有其他课程可以尝试

不想让人们远离回答,但我有一个可能使用Cocoa Touch类编码的游戏数据文件。当在十六进制编辑器中查看时,数据显示乱码和用户名,这使我怀疑它是各种存档或编码对象。我已将十六进制编辑器中的十六进制复制到一个示例项目中,我用它来尝试解压缩数据。

我不相信这与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´

相应的十六进制:

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

如果有人愿意帮助解决这个问题,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

  

如果我有一个NSData的任意块作为十六进制值,有没有办法确定该对象在归档或序列化之前可能是什么?

不是真的。这与在不使用UTI,扩展名,MIME类型的情况下正确读取任意文件一样“微不足道”。当然,您的程序还需要支持读取所有这些文件/格式。

  

我不介意一些猜测和检查方法,但我需要一些指向正确的方向。

如果你不想要一项难以置信的艰巨任务,你需要缩小你的问题/输入。

  

我有一个带有一些十六进制的NSData对象。我应该看看NSData的哪些方法?

它只是length个字节的数据blob。它可以代表任何东西 - 如果你不知道它来自哪里。

  

还有其他课程可以尝试吗?

也许您首先要通过NSCoder或其他序列化程序/归档程序保存所有数据,它们会为您提供一些内省和支持,以便您输入自己的信息(可与UTI或MIME类型相媲美)。

  

修改

     

不想让人们远离回答,但我有一个可能使用Cocoa Touch类编码的游戏数据文件。当在十六进制编辑器中查看时,数据显示乱码和用户名,这使我怀疑它是各种存档或编码对象。我已将十六进制编辑器中的十六进制复制到一个示例项目中,我用它来尝试解压缩数据。

使用这些API,数据可以用多种方式表示。您可能面临以下领域:1)通过2)密钥存档的专有文件格式。

后者对于非平凡的数据表示更容易。您需要定义在取消归档时没有的任何objc类。在这种情况下,一些示例表示将提供您将需要的数据结构的大致轮廓(在传统实现中)。如果unarchiver能够打开它,它也可以是类似于NSDictionary的存档。这个问题比其他语言更容易,因为归档通常会依赖于映射到Cocoa中成员的键和值。

  

<强> EDIT2:

     

该文件来自Draw Something目录。它被称为gamedata.i3d

(耸肩)

答案 1 :(得分:0)

尝试使用NSKeyedUnarchiver进行阅读。使用像NSArray,NSDictionary和NSString这样的标准Foundation容器来存储数据并不罕见,所以你可能会很幸运。如果涉及自定义类,这显然是行不通的,但是可能值15分钟的时间来尝试它。