Làm thế nào để ghi lại một đặc tả định dạng tệp [đã đóng]


12

Đối với một dự án, tôi cần phải làm việc với các loại tệp khác nhau từ một số trò chơi cũ và phần mềm có liên quan - tệp cấu hình, lưu, lưu trữ tài nguyên, v.v. Phần lớn trong số này chưa được ghi lại, cũng như không có công cụ nào hoạt động với chúng, vì vậy tôi phải thiết kế ngược các định dạng và xây dựng thư viện của riêng mình để xử lý chúng.

Mặc dù tôi không cho rằng có nhu cầu lớn đối với hầu hết nhu cầu đó, tôi dự định công bố kết quả của những nỗ lực của mình. Có bất kỳ tiêu chuẩn được chấp nhận cho các tài liệu định dạng tập tin? Nhìn xung quanh, có một số kiểu được sử dụng: một số, như Đặc tả định dạng tệp .ZIP , rất dài dòng; những người khác, như những người trên XentaxWiki, thì ngắn gọn hơn nhiều - tôi thấy một số trong số họ khó đọc; cá nhân tôi thích nhất là phần mô tả về Hệ thống tệp thẻ nhớ PlayStation 2 , bao gồm cả văn bản mô tả chi tiết và một số 'bản đồ bộ nhớ' với phần bù và như vậy - nó cũng phù hợp nhất với trường hợp sử dụng của tôi. Nó sẽ thay đổi một chút cho các định dạng khác nhau, nhưng có vẻ như cần có một số nguyên tắc chung mà tôi nên cố gắng tuân theo.

Chỉnh sửa: Tôi dường như không giải thích rất rõ những gì tôi muốn làm. Hãy để tôi xây dựng một ví dụ.

Tôi có thể có một số phần mềm cũ lưu trữ cấu hình của nó trong tệp 'nhị phân' - một loạt các bitfield, số nguyên, chuỗi và không có gì được dán bởi chương trình, nhưng không thể đọc được bằng con người. Tôi giải mã điều này. Tôi muốn ghi lại chính xác định dạng của tệp này là gì, theo cách có thể đọc được của con người, như một đặc điểm kỹ thuật để thực hiện một thư viện để phân tích và sửa đổi tệp này. Ngoài ra, tôi muốn người khác dễ hiểu điều này.

Có một số cách như vậy một tài liệu có thể được viết. Ví dụ PKZIP ở trên rất dài dòng và chủ yếu mô tả định dạng tệp trong văn bản miễn phí. Ví dụ về PS2 cung cấp các bảng về các loại giá trị, độ lệch và kích thước, với các nhận xét mở rộng về ý nghĩa của tất cả chúng. Nhiều người khác, như những người trên XentaxWiki, chỉ liệt kê các loại và kích cỡ biến, với rất ít hoặc không có lời bình luận nào.

Tôi hỏi liệu có bất kỳ tiêu chuẩn nào, giống như một hướng dẫn về phong cách mã hóa, cung cấp hướng dẫn về cách viết loại tài liệu này. Nếu không, có ví dụ xuất sắc nổi tiếng nào mà tôi nên thi đua không? Nếu không, ít nhất ai cũng có thể tóm tắt một số lời khuyên hữu ích?



Hà! Tôi hiểu cảm giác đó. Một định dạng tôi đang xem tôi thực sự có mã nguồn gốc đã viết tệp. Vấn đề là các biến được viết theo thứ tự khác với định nghĩa cấu trúc, với một số nội dung bổ sung được rắc ở giữa. Và các ý kiến ​​đã sai về sự bù đắp. Đó là một phần của những gì đã truyền cảm hứng cho câu hỏi này - một mong muốn mạnh mẽ ĐỪNG LÀM ĐƯỢC.
Sopoforic

1
Kinh nghiệm duy nhất của tôi với các loại tệp kỹ thuật đảo ngược được ghi lại là từ wiibrew.org. Nếu tôi nhớ chính xác, họ đã ghi lại tệp là a struct. Nó hoạt động khá tốt.
MetaFight

1
Tôi có thể đang hiểu nhầm câu hỏi nhưng có vẻ như bạn đang tìm kiếm một cái gì đó giống như EBNF .

@MattFenwick: BNF là để chỉ định cú pháp của ngôn ngữ; không hoàn toàn những gì tôi đang theo đuổi Tôi sẽ chỉnh sửa để rõ ràng hơn về loại định dạng tệp.
Sopoforic

Câu trả lời:


4

Một tệp nhị phân chỉ là một chuỗi các bit được sắp xếp thành các đơn vị logic theo các quy tắc nhất định . Những quy tắc này thường được gọi là ngữ pháp . Ngữ pháp có thể được phân thành bốn loại ( hệ thống phân cấp Chomsky ) và đối với ngữ pháp không ngữ cảnh, bạn nên sử dụng Mẫu Backus-Naur mở rộng như Matt Fenwick đã chỉ ra trong nhận xét của mình. Việc giải thích (hoặc ngữ nghĩa) của chuỗi được lưu trữ trong tệp có thể được mô tả bằng lời nói hoặc với các chương trình mẫu được chú thích tốt nối tiếp và giải tuần tự hóa thông tin.

Để biết thêm về tài liệu định dạng tệp nhị phân, đề nghị đọc lên ví dụ tiêu chuẩn ASN.1 .


Về mặt kỹ thuật , hầu hết các tệp cấu hình có ngôn ngữ không ngữ cảnh, vì chúng có ngôn ngữ hữu hạn. Thực tế, việc viết 'tập hợp tất cả các chuỗi 2 byte' (ví dụ: đối với tệp cấu hình chỉ là bitfield 16 mục) trong EBNF không dạy cho bất cứ ai. Con trỏ đến tiêu chuẩn ASN.1 là câu trả lời gần nhất mà tôi đã nhận được, mặc dù có vẻ như một đặc điểm kỹ thuật trong ASN.1 được đọc bởi máy tính và tôi muốn có thông tin để viết tài liệu cho con người. Tuy nhiên, nếu không có gì phù hợp hơn với yêu cầu của tôi xuất hiện, ngay sau đó, tôi sẽ chấp nhận câu trả lời này. Cảm ơn vì sự hỗ trợ của bạn.
Sopoforic

2

Điều đó thật kỳ quặc bởi vì việc tìm kiếm nhanh các định dạng tệp đã đưa ra một bài viết Wikipedia (Danh sách các định dạng tệp) . Nó cũng bao gồm một số định dạng Dữ liệu trò chơi video .

Danh sách các định dạng tệp dữ liệu phổ biến cho các trò chơi video trên các hệ thống hỗ trợ các hệ thống tệp, phổ biến nhất là các trò chơi trên PC.

Nó cũng bao gồm một lựa chọn lớn các định dạng Phương tiện lưu trữ trò chơi video .

Danh sách các phần mở rộng tên tệp phổ biến nhất được sử dụng khi hình ảnh ROM hoặc phương tiện lưu trữ của trò chơi được sao chép từ thiết bị ROM gốc sang bộ nhớ ngoài như đĩa cứng cho mục đích sao lưu hoặc để trò chơi có thể chơi được bằng trình giả lập. Trong trường hợp phần mềm dựa trên hộp mực, nếu phần mở rộng dành riêng cho nền tảng không được sử dụng thì phần mở rộng tên tệp ".rom" hoặc ".bin" thường được sử dụng để làm rõ rằng tệp chứa bản sao nội dung của ROM. Hình ảnh ROM, đĩa hoặc băng thường không bao gồm một tệp hoặc ROM, thay vào đó là toàn bộ cấu trúc tệp hoặc ROM có trong một tệp duy nhất trên phương tiện sao lưu.


Có bất kỳ tiêu chuẩn được chấp nhận cho các tài liệu định dạng tập tin?

Không có tiêu chuẩn "chính thức" ở bất cứ đâu. Vì các định dạng tệp được tạo bởi một công ty, công ty quyết định định dạng cho tài liệu.


2
Tôi nghĩ bạn đã hiểu nhầm câu hỏi của tôi. Tất nhiên, có nhiều định dạng tệp đã được ghi lại - Tôi đã sử dụng XentaxWiki, bao gồm hơn 1500 định dạng. Nhưng các tệp tôi quan tâm thường không được ghi lại - những thứ dành riêng cho trò chơi như lưu tệp hoặc cấu hình, thay vì các định dạng chứa chung, thường. Tình huống của tôi là không có tài liệu nào tồn tại và tôi dự định viết một số - vậy làm thế nào để thực hiện điều này?
Sopoforic

Giống như tất cả các định dạng tệp khác đã được ghi lại.
Robert Harvey

4
@RobertHarvey: Nhầm lẫn, mâu thuẫn, không chính xác và không đầy đủ? Nghiêm túc, mặc dù, như tôi đã đề cập, tôi lưu ý một số phong cách chung khác nhau được sử dụng. Tôi không đủ quen thuộc với công việc trong lĩnh vực này để biết liệu có phong cách cụ thể nào được ưa thích không. Các tài nguyên trên XentaxWiki, tài nguyên lớn nhất mà tôi đã thấy, hầu như chỉ dành cho các định dạng chứa, vì vậy chúng không hoàn toàn phù hợp với trường hợp tổng quát hơn. Nếu tôi nghĩ rằng chỉ cần chọn một ví dụ ngẫu nhiên để thi đua là đủ tốt, tôi sẽ không hỏi lời khuyên.
Sopoforic

@Sopoforic: Sau đó, bạn cần phải rõ ràng hơn trong câu hỏi của bạn những gì bạn muốn. Bạn có nghiêm túc hỏi chúng tôi "Làm cách nào để viết tài liệu cho định dạng tệp không?" Có toàn bộ giáo trình giáo dục về văn bản kỹ thuật được dành cho chủ đề đó. Tìm một định dạng có tài liệu rõ ràng, được viết tốt (theo tiêu chuẩn cá nhân của bạn) và mô phỏng định dạng đó. Tất cả họ không thể là tào lao. Gợi ý: Ví dụ sử dụng là vua. Sự rõ ràng của lời giải thích đến một giây gần.
Robert Harvey

1
@RobertHarvey: Có, giống như các câu hỏi về cách nhận xét mã của bạn hoặc cách ghi lại hàm, tôi đang tìm một "hướng dẫn kiểu" để viết một đặc tả định dạng dễ hiểu. Nếu tôi muốn biết cách viết RFC, tôi có thể xem RFC 2223. Nếu tôi muốn biết nên sử dụng kiểu nào trong mã Python, tôi có thể đọc PEP 8. Nếu tôi muốn biết Cách đặt câu hỏi theo cách thông minh, ESR đã bảo hiểm cho tôi. Có một số hướng dẫn tương tự cho các đặc điểm kỹ thuật định dạng tập tin? Hoặc một ví dụ nổi tiếng xuất sắc của một? Tôi chắc chắn có thể sử dụng phán đoán của riêng mình, nhưng nếu một tiêu chuẩn tồn tại, việc tuân theo nó là điều hợp lý.
Sopoforic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.