मैं फ़्लोट को चार * में कैसे बदलूं?


11

इलेक्ट्रिकल इंजीनियरिंग स्टैक एक्सचेंज पर यह सवाल पूछा गया था और यहां निर्देशित किया गया था:

सुंदर आत्म व्याख्यात्मक; कैसे मैं एक फ्लोट को चार * में परिवर्तित करने के बारे में जाऊंगा? मेरे पास कोड है जिसमें फ्लोट 'प्रतिरोध' को लगातार अपडेट किया जा रहा है। मैं 'प्रतिरोध' का मान लेने के लिए चर 'परिणाम' को अद्यतन करने में सक्षम होना चाहूंगा। यहाँ कुछ कोड है, अगर यह मदद करता है:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

आपकी सहायताके लिए धन्यवाद!

जवाबों:


15

मानक Arduino लाइब्रेरी नामक एक फ़ंक्शन है dtostrf()। मैं इसे "दशमलव से स्ट्रिंग फ्लोट" के रूप में मानता हूं। आप फ्लोट में गुजरते हैं, आप पूरे नंबर को कितना चौड़ा करना चाहते हैं (यदि यह फिट होगा), परिशुद्धता के दशमलव की संख्या - और बफर जिसे आप भरना चाहते हैं।

ध्यान दें कि! आपको बफर प्रदान करने की आवश्यकता है, और आपको पर्याप्त से अधिक प्रदान करने के लिए सावधान रहने की आवश्यकता है! 1 जोड़ना न भूलें, (अंत में NUL वर्ण को संग्रहीत करने के लिए):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

इस दे देंगे resultकी तरह मूल्यों " 1.23"और " -1.23"और "123456789"(उद्धरण के बिना)। अंतिम उदाहरण पर ध्यान दें - यदि यह बहुत बड़ा है, तो यह संख्या को कम नहीं करेगा, और यह 10- वर्ण result(अंतिम मत भूलना NUL) बस आपके बफर को बह निकला ...

संयोग से, यदि आप एक नकारात्मक चौड़ाई निर्दिष्ट करते हैं, तो यह उत्तर को सही-सही नहीं बताएगा, इसे बाएं-औचित्य देगा (शुरुआत के बजाय अंत में कोई रिक्त स्थान डालें)।


क्या चाल अच्छी लगी! बहुत बहुत धन्यवाद श्रीमान :)
higgsboson

-2

मूल रूप से आप एक 4-बाइट चर (फ्लोट) को 4-बाइट स्ट्रिंग (चार चर आकार 1-बाइट आकार) में कनवर्ट करने का प्रयास कर रहे हैं। Arduino डेटा प्रकारों के बारे में अधिक जानकारी यहाँ http://playground.arduino.cc/Code/DatatypePractices है

आप इन प्रश्नों के उत्तर /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c पर आज़मा सकते हैं

/programming/24420246/c-function-to-convert-float-to-byte-array

मैं मानता हूं कि const char * result = "";आपके उदाहरण के उपयोग से मैं भ्रमित हूं ।

"कॉन्स्ट" कीवर्ड चर को "केवल पढ़ने के लिए" बनाता है और इसलिए आप इसे संशोधित नहीं कर सकते। https://www.arduino.cc/en/Reference/Const

संपादित करें: दुर्भाग्य से मेरे पास अपने समाधानों का परीक्षण करने के लिए अभी Arduino डिवाइस नहीं है


1
constकीवर्ड करता नहीं चर बनाने के केवल पढ़ने के लिए। यहाँ चर एक सूचक है, और इसे स्थिर रखने की आवश्यकता नहीं है। constकीवर्ड उत्तीर्ण डेटा की ओर इशारा किया जा रहा है , नहीं सूचक ही। दूसरे शब्दों में, आपको उस सूचक के माध्यम से स्ट्रिंग को संशोधित करने की अनुमति नहीं है। यदि आप एक निरंतर पॉइंटर चाहते हैं, तो इसे char * const result(या const char * const resultयदि आप डेटा के constलिए पॉइंटर चाहते हैं const) के रूप में घोषित करें ।
एडगर बोनट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.