मान लीजिए कि मेरे पास सी # संरचना है:संरचना ऑफसेट पाने के लिए सी # कमांड?
[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 (फील्ड ऑफसेट) को पुनः टाइप किए बिना प्राप्त कर सकता हूं? मैं इस तरह कुछ ढूंढ रहा हूं:
if (n >= offsetof(IMAGE_DOS_HEADER.e_lfanew) + sizeof(int)) {
...
}
क्या ऐसा कोई आदेश है? मेरे वास्तविक कोड में, मुझे इनमें से कई परीक्षण करना पड़ता है, और यह स्ट्रिंग में पूर्व फ़ील्ड जोड़कर या फ़ील्ड ऑफसेट विशेषताओं से मूल्यों की प्रतिलिपि बनाकर संख्याओं को टाइप करने के लिए कठिन और त्रुटि-प्रवण प्रतीत होता है। क्या कोई बेहतर तरीका है?
, मुझे लगता है कि नहीं था मैं किसी भी असली जवाब (nobugz के छोड़कर) मिल चाहते हैं, और यहाँ मैं तीन विकल्प! मुझे शायद ही पता चले कि किसको चुनना है, इसलिए मैंने उन सभी को वोट दिया। बस स्थिरांक को परिभाषित करना एक उचित दृष्टिकोण है, लेकिन यह कष्टप्रद है कि यह संरचना के लेआउट को कैसे रोकता है। मैं अभी भी प्रबंधित/अप्रबंधित की सूक्ष्मता सीख रहा हूं, लेकिन मुझे लगता है कि wj32 सही है क्योंकि संकलक पहले से ही मुझे संरचना में पॉइंटर प्राप्त करने दे रहा है, मुझे पता है कि प्रबंधित/अप्रबंधित ऑफसेट समान हैं। तो मैं उनके जवाब के साथ जा रहा हूं क्योंकि ऐसा लगता है कि यह सबसे आसान-पढ़ने वाला कोड उत्पन्न करता है। इस तरह के महान उत्तरों के लिए सभी को धन्यवाद! –