2012-04-16 28 views
6

Nếu tôi có một khối tùy ý NSData dưới dạng giá trị hex, có cách nào để xác định đối tượng có thể có trước khi nó được lưu trữ hoặc tuần tự không? Tôi không quan tâm một vài phương pháp đoán và kiểm tra, nhưng tôi cần một số gợi ý đi đúng hướng.Giải mã một khối NSData tùy ý?

Tôi có đối tượng NSData với một số hex trong đó. Tôi nên xem xét phương pháp nào của NSData? Có các lớp học khác để thử cũng như

Không muốn dọa mọi người tránh trả lời, nhưng tôi có một tệp dữ liệu trò chơi có khả năng được mã hóa bằng lớp Cocoa Touch. Các dữ liệu, khi được xem trong một trình soạn thảo hex, cho thấy vô nghĩa và một tên người dùng, dẫn tôi đến nghi ngờ rằng đó là một đối tượng lưu trữ hoặc được mã hóa các loại. Tôi đã sao chép hex từ trình soạn thảo hex vào một dự án mẫu mà tôi đang sử dụng để thử và hủy lưu trữ dữ liệu.

Tôi không tin điều này liên quan đến định dạng 3D, tiện ích mở rộng tệp tùy ý.

Đây là dữ liệu. Tôi hy vọng nó không bị lạc trong bản dịch:

'µ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´ 

Và hex tương ứng:

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 

Nếu bất cứ ai quan tâm để giúp con số này ra nó sẽ được nhiều đánh giá cao.

+0

+1, Câu hỏi duy nhất. – CodaFi

+0

Rất tiếc, giá trị hex. – Moshe

+0

Vì vậy, khối dữ liệu, được biểu diễn bằng một cá thể 'NSData', giữ một thể hiện của một số lớp ObjC (" đối tượng ** có thể có ") là gì? Hoặc nó có thể chứa bất cứ điều gì cả? –

Trả lời

2

Nếu tôi có khối NSData tùy ý dưới dạng giá trị hex, có cách nào để xác định đối tượng có thể có trước khi lưu trữ hoặc tuần tự không?

Không thực sự. Đó là về 'tầm thường' khi đọc các tệp tùy ý một cách chính xác mà không cần sử dụng một loại UTI, mở rộng, loại MIME. Tất nhiên, chương trình của bạn cũng sẽ cần hỗ trợ đọc tất cả các tệp/định dạng đó.

Tôi không quan tâm đến một số phương pháp đoán và kiểm tra, nhưng tôi cần một số gợi ý đúng hướng.

Bạn cần thu hẹp sự cố/đầu vào của mình, nếu bạn không muốn có một nhiệm vụ khó khăn không thể.

Tôi có đối tượng NSData có một số hex trong đó. Tôi nên xem xét phương pháp nào của NSData?

Nó chỉ là một đốm màu dữ liệu của length byte. Nó có thể đại diện cho bất cứ điều gì - nếu bạn không biết nó đến từ đâu.

Có các lớp học khác để thử không?

Có lẽ bạn sẽ bắt đầu bằng cách lưu tất cả dữ liệu của mình qua NSCoder hoặc bộ nối tiếp/bộ lưu trữ khác cung cấp một số nội tâm và hỗ trợ để bạn nhập thông tin của riêng mình (có thể so sánh với loại UTI hoặc MIME).

Edit:

Không muốn hù dọa người đi từ trả lời, nhưng tôi có một tập tin dữ liệu trò chơi được khả năng mã hóa sử dụng một lớp Cocoa Touch. Các dữ liệu, khi được xem trong một trình soạn thảo hex, cho thấy vô nghĩa và một tên người dùng, dẫn tôi đến nghi ngờ rằng đó là một đối tượng lưu trữ hoặc được mã hóa các loại. Tôi đã sao chép hex từ trình soạn thảo hex vào một dự án mẫu mà tôi đang sử dụng để thử và hủy lưu trữ dữ liệu.

Sử dụng các API này, dữ liệu có thể được trình bày theo nhiều cách. Bạn có thể phải đối mặt với một cái gì đó trong phạm vi của 1) một định dạng tập tin độc quyền thông qua 2) một kho lưu trữ có khóa.

Cách thứ hai dễ dàng hơn cho việc biểu diễn dữ liệu phi vật chất. Bạn sẽ cần xác định bất kỳ lớp objc nào mà bạn không có sẵn khi bị hủy lưu trữ. Trong trường hợp đó, một vài đại diện mẫu sẽ cung cấp một phác thảo sơ lược về các cấu trúc dữ liệu mà bạn sẽ cần (theo các triển khai thông thường). Nó cũng có thể là một kho lưu trữ tương tự như một NSDictionary, nếu unarchiver có khả năng mở nó. Đây là một vấn đề dễ hơn so với các ngôn ngữ khác, vì việc lưu trữ thường rơi trở lại các khóa và giá trị được ánh xạ tới các thành viên trong Cocoa.

Edit2:

Các tập tin đến từ các thư mục Draw Something. Nó được gọi là gamedata.i3d

(nhún vai)

+0

Âm thanh với tôi như ai đó đã lưu dữ liệu này, và có một vài hạn chế (giả định) về nội dung, nhưng trong trường hợp chung đây là câu trả lời duy nhất có thể. –

+0

@ IuliusCæsar aye - chỉ cần đọc OP ** **. Counter-editing… – justin

0

Hãy thử sử dụng NSKeyedUnarchiver để đọc nó. Nó không phải là không phổ biến để chỉ sử dụng các bộ chứa nền tảng chuẩn như NSArray, NSDictionary và NSString để lưu trữ dữ liệu, vì vậy bạn có thể gặp may mắn. Điều đó rõ ràng sẽ không hoạt động nếu các lớp tùy chỉnh có liên quan, nhưng có thể mất 15 phút thời gian để thử nó.

+0

Tôi đã thử, quan tâm để đăng một số mã? – Moshe

+1

Nếu bạn đã thử, sau đó đăng mã và kết quả của bạn.Nhưng dù sao thì đây cũng là một cú sút dài. Tôi không thấy nhiều lợi ích khi dành nhiều thời gian cho nó. – Caleb

Các vấn đề liên quan