다음과 같이 C# 구조체가 있다고 가정합니다.구조체 오프셋을 얻으려면 C# 명령을?
[StructLayout(LayoutKind.Explicit)]
struct IMAGE_DOS_HEADER {
[FieldOffset(60)] public int e_lfanew;
}
이제 다음과 같은 파일에서 데이터를 읽은다고 가정합니다.
byte[] data = new byte[4096];
FileStream f = new FileInfo(filename).Open(FileMode.Open, FileAccess.Read);
int n = f.Read(data, 0, 4096);
이제 n
을 읽었는지 테스트하고 싶습니다. e_lfanew
의 값을 얻기에 충분한 바이트. 그것을 다시 입력하지 않고도 값 60 (FieldOffset)을 얻을 수있는 방법이 있습니까? 나는 다음과 같은 것을 찾고있다.
if (n >= offsetof(IMAGE_DOS_HEADER.e_lfanew) + sizeof(int)) {
...
}
그런 명령이 있는가? 실제 코드에서는 이러한 테스트 중 몇 가지를 만들어야하며 구조체의 이전 필드를 추가하거나 FieldOffset 특성에서 값을 복사하여 수동으로 숫자를 입력하는 것이 지루하고 오류가 발생하는 것처럼 보입니다. 더 좋은 방법이 있습니까?
을 와우, 나는 (nobugz 년대 제외) 진짜 대답을 얻을 것이라고 생각하지 않았고, 나는 여기 세 가지 선택이있다! 나는 선택할 것을 거의 알지 못했기 때문에 그들을 모두 뽑았습니다. 단순히 상수를 정의하는 것은 합리적인 접근법이지만 struct의 레이아웃을 모호하게 만드는 것은 짜증나게합니다. 여전히 관리 형/관리되지 않음의 미묘한 점을 배우고 있지만 wj32는 컴파일러가 이미 구조체에 대한 포인터를 가져다 주었기 때문에 관리 형/비 관리 형 오프셋이 동일하다는 것을 알고 있다고 생각합니다. 가장 쉬운 방법으로 읽는 코드를 생성하는 것으로 보입니다. 모두에게 감사드립니다. –