"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं 64-बिट मशीनों पर किसी पॉइंटर को पूर्णांक में सुरक्षित रूप से कैसे परिवर्तित कर सकता हूँ?

मैं 64-बिट मशीनों पर किसी पॉइंटर को पूर्णांक में सुरक्षित रूप से कैसे परिवर्तित कर सकता हूँ?

2024-12-23 को प्रकाशित
ब्राउज़ करें:573

How Can I Safely Convert a Pointer to an Integer on 64-Bit Machines?

एक पॉइंटर को एक पूर्णांक में परिवर्तित करना: 64-बिट मशीनों के लिए दोबारा गौर किया गया

सी/सी में, 64- से निपटते समय एक संभावित नुकसान पॉइंटर्स को संभालते समय बिट मशीनें उत्पन्न होती हैं। पारंपरिक रूपांतरण तकनीक, जैसे कि नीचे दिखाया गया है, के परिणामस्वरूप सटीक त्रुटियां हो सकती हैं:

void function(MESSAGE_ID id, void* param) {
  if (id == FOO) {
    int real_param = (int)param;
    // ...
  }
}

अद्यतन कास्टिंग तकनीकों के साथ समाधान

इस समस्या को सुधारने और 32-बिट और 64-बिट सिस्टम दोनों पर निर्बाध संगतता सुनिश्चित करने के लिए, एक आधुनिक सी दृष्टिकोण की सिफारिश की जाती है:

#include 

void *p;
auto i = reinterpret_cast<:uintptr_t>(p);

सही डेटा प्रकार चुनना

किसी पॉइंटर को पूर्णांक के रूप में संग्रहीत करते समय, चयन करना महत्वपूर्ण है उपयुक्त डेटा प्रकार. इस प्रयोजन के लिए, uintptr_t प्रकार सबसे उपयुक्त है।

// C  11
std::uintptr_t i;

// C  03
extern "C" {
#include 
}
uintptr_t i;

// C99
#include 
uintptr_t i;

सही कास्टिंग ऑपरेटर को नियुक्त करना

सी में, विभिन्न प्रकार के कास्ट मौजूद हैं। इस विशिष्ट परिदृश्य के लिए, reinterpret_cast सबसे उपयुक्त विकल्प है।

// C  11
auto i = reinterpret_cast<:uintptr_t>(p);

// C  03
uintptr_t i = reinterpret_cast(p);

// C
uintptr_t i = (uintptr_t)p;
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3