2012-04-27 2 views
0

이진 파일 형식으로 작업하고 있습니다. 설명하기가 어렵 기 때문에 가능한 한 간단하게 만들려고 노력할 것입니다.파일에서 데이터 참조/포인터 처리?

파일에 기록되는 데이터 구조에는 '포인터'(즉, 파일의 다른 위치에있는 문자열에 대한 포인터 또는 파일 내의 다른 구조체에 대한 포인터)가 포함될 수 있습니다. '포인터' pointer '는'offset '이 될 것입니다. 즉, 구조는 파일 내의 문자열의 OFFSET을 포함합니다.

빠른 예 :

struct ExampleStruct { 
    public string Text; 
    public int Number; 
}; 

'텍스트'문자열 멤버

파일의 시작 부분에 작성 및 NOT 될 것이다는 직렬화 된 구조체에 포함된다.

그래서, 본질적으로, 구조체는 파일에 다음과 같이 표시됩니다

struct ExampleStruct { 
    public uint TextLocationOffset; 
    public int Number; 
}; 

를 ... 'TextLocationOffset'는 문자열 '텍스트'이 파일 내에서의 위치를 ​​오프셋입니다.

그래서 필자는 "재배치 테이블"을 필요로합니다. 본질적으로 파일 내의 데이터 포인터를 가리키는 이중 포인터의 목록입니다. 내가 ExampleStruct 나의 파일로 작성하기 때문에, 그래서

(? 확인 감각을한다), 그리고는 '포인터'(TextLocationOffset)를 포함, 내 "재배치 테이블"로 구성 것이다 :

public uint TextLocationOffset_LocationOffset; 

합니다. .. 'TextLocationOffset_LocationOffset'에는 파일 내의 'TextLocationOffset'의 OFFSET이 포함됩니다.

모두 의미가 있습니까? 나는 그것을 가능한 한 많이 단순화하려고 노력했다.

내 문제는 어떻게 포인터/이중 포인터/재배치 C#에서 모든 추적 할 것이라고? 데이터는 항상 가지고있는 byte [] 배열에 추가되므로 오프셋이 계속 변경됩니다.

'C'에서 'relocated'가되는 포인터를 두 번 가져올 수 있기 때문에 쉽습니다. 그런 다음 원래 '포인터'(예 : 'TextLocationOffset')를 올바른 오프셋으로 변경할 수 있습니다. 그런 다음 'TextLocationOffset'값의 위치를 ​​찾고이를 재배치 테이블에 추가 할 수 있습니다.

죄송합니다. 몇 주 전에이 질문을했지만 답변이 없으므로 혼란 스럽습니다.

내 코드에서이 모든 것을 추적하는 방법이 필요합니다. 팁이 있습니까?

P. 좀 더 철저한 예제가 필요하다면 기꺼이 제공 할 것입니다. :)

+0

가능한 이진 파일 형식 - 데이터 '재배치'? (http : // stackoverflow.com/questions/10183384/binary-file-format-data-relocations) – user7116

답변

0

이 모든 작업이 완료되었습니다.

0

다른 방법으로 데이터를 직렬화 및 비 직렬화 할 수 있습니다. 관리되는 응용 프로그램에서 재배치 및 오프셋을 추적하면 매우 예외적 인 시나리오가 없으면 불필요한 작업을 수행 할 수 있습니다. SO 사용자는 기능면에서 달성하고자하는 것에 대해 더 많이 알려주면 더 나은 지침을 제공 할 수 있습니다.

+0

사실 3D 게임의 바이너리 파일 형식입니다. 파일에는 텍스쳐, 아이콘, 텍스트 스트링 등과 같은 "구조체"가 포함되어 있습니다. 파일의 시작 부분에는 구조체 데이터의 진입 점에 대한 오프셋을 포함하는 데이터 '식별자'가 있습니다. 나는 각 구조에 대한 파일 오프셋을 포함하는 "위치"구조체가있는 솔루션을 생각해 냈습니다.이 구조체는 정상적으로 작동하는 것 같습니다. 이 작업을 수행하는 더 간단한 방법이 있는지 궁금합니다. :) – Alex