डिबग प्रयोजनों के लिए मैं अक्सर उत्पादन सूचक मान (ज्यादातर this
) qDebug रहे हैं:पॉइंटर मान को क्यूस्ट्रिंग में कैसे परिवर्तित करें?
qDebug("pointer of current object = 0x%08x",this);
, प्रारूप स्ट्रिंग के रूप में "% 08x" का उपयोग और केवल एक पैरामीटर के रूप this
गुजर।
मैं पॉइंटर मान को क्यूस्ट्रिंग में कैसे परिवर्तित कर सकता हूं?
यह मैं अब तक क्या मिला है:
char p = (char)this;
return QString("0x%1").arg(p, 8, '0');
लेकिन संकलक क्या है कि मूल्य के साथ क्या करना यह पता लगाने की प्रतीत नहीं होता। इस मामले में char
कास्टिंग कर रहा है? या ऐसा करने का एक सुरक्षित तरीका क्या होगा?
क्यूटी 4.7.4 के साथ विजुअल सी ++ का उपयोग करना।
संपादित
एक संकलक त्रुटि संदेश (error C2666) में सुझाव दिया
qulonglong p = (qulonglong)this;
return QString("0x%1").arg(p, 8, '0');
पैदावार के रूप में qulonglong
का उपयोग करना।
QString pointer_to_qstring(void *ptr)
{
std::ostringstream oss;
oss << std::setw(8) << std::setfill('0') << std::hex << ptr:
return QString(oss.str().c_str());
}
का प्रयोग कर एक चार सूचक परिवर्तित गलत परिणाम का उत्पादन करेगा, के रूप में पात्रों केवल आठ बिट कर रहे हैं पर्याप्त है। इसके बजाय 'qulonglong' (या 'qulong' अगर आप 32-बिट सिस्टम पर हैं) आज़माएं। –
आपको लगता है कि 'qDebug' क्या कर रहा है जब आप उस शाब्दिक स्ट्रिंग में प्रारूप विनिर्देशक के साथ पैरामीटर के रूप में' यह 'पास करते हैं? – AJG85
ईमानदारी से: मेरे पास कोई सुराग नहीं है। मुझे पता है कि "% 08x" 8-बिट हेक्साडेसिमल मान का प्रतिनिधित्व करता है। –