2012-09-04 13 views
5

मैं एक आई 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; 

उत्तर

3

अपने परिणाम को हस्ताक्षरित 16-बिट पूर्णांक पर कास्ट करें।

qDebug() << (int16_t)milAmps; 
+0

कभी भी सी-स्टाइल कास्टिंग का उपयोग नहीं करते :) – fasked

+0

@fasked: हाँ , पुरानी आदतें मर जाती हैं ... अब मेरे लॉन से उतर जाओ! –

+0

अच्छा धन्यवाद यह काम करने लगता है लेकिन क्या कोई कारण है कि यह असुरक्षित/डूब जाएगा ?? – PhilBot

4

आपको इस स्ट्रिंग को 16-बिट पूर्णांक में कनवर्ट करने की आवश्यकता है। यह सबसे अधिक संभावना है कि आप QString::toShort विधि का उपयोग कर सकते हैं।

short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << milAmps; 
+0

यह प्रिंट 0। कोई विचार क्यों? त्रुटि होने पर – PhilBot

+0

'toShort' विधि' 0' वापस कर सकती है। क्या आप सुनिश्चित हैं कि 'stringListSplit [0]' सही स्ट्रिंग है? – fasked

+0

शायद सीमा से बाहर होने वाले इनपुट के बारे में शिकायत कर रहा है। आपको पूर्णांक के रूप में विश्लेषण करना होगा और इसे नीचे डालना होगा। –

संबंधित मुद्दे