मैं एक आई 2 सी डिवाइस के रजिस्टरों को पढ़ रहा हूं और वापसी मूल्य की सीमा -32768 से 32768 है, हस्ताक्षरित पूर्णांक। नीचे एक उदाहरण है:क्यूटी कनवर्ट करने के लिए नकारात्मक हेक्स स्ट्रिंग को कॉन्फ़िगर करें
# i2cget -y 3 0x0b 0x0a w
0xfec7
क्यूटी में, मैं यह मान (0xfec7) हो जाते हैं और एक हस्ताक्षरित पूर्णांक के रूप में एक QLabel में यह प्रदर्शित करना चाहते हैं। परिवर्तनीय स्ट्रिंग लिस्टस्प्लिट [0] मूल्य '0xfec7' के साथ एक क्यूस्ट्रिंग है।
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32
qDebug() << milAmps;
समस्या कोई फर्क नहीं पड़ता कि मैं क्या मैं हमेशा, अहस्ताक्षरित पूर्णांकों पाने की कोशिश है, इसलिए इस उदाहरण मैं 65,223 जो निर्दिष्ट अधिकतम वापसी मूल्य से अधिक हो रही है के लिए। मुझे हेक्स मान को एक हस्ताक्षरित पूर्णांक में परिवर्तित करने की आवश्यकता है, इसलिए मुझे हेक्स मान को 2 एस पूरक के साथ व्यक्त करने की आवश्यकता है। मुझे QString दस्तावेज़ में एक साधारण विधि नहीं दिखाई दे रही है। मैं इसे क्यूटी में कैसे प्राप्त कर सकता हूं?
नोट:
QString :: toShort रिटर्न 0:
// Now update the label
short milAmps = stringListSplit[0].toShort(0,16);
qDebug() << "My new result: " << milAmps;
stringListSplit की एक इनपुट [0] '0xfebe' के बराबर है, मैं -322 का उत्पादन मिलता है के लिए, सी का उपयोग कर कीथ द्वारा उत्तर दिया गया शैली कास्टिंग:
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
कभी भी सी-स्टाइल कास्टिंग का उपयोग नहीं करते :) – fasked
@fasked: हाँ , पुरानी आदतें मर जाती हैं ... अब मेरे लॉन से उतर जाओ! –
अच्छा धन्यवाद यह काम करने लगता है लेकिन क्या कोई कारण है कि यह असुरक्षित/डूब जाएगा ?? – PhilBot