Arduino पर एक चार्ट में एक इंट या स्ट्रिंग को परिवर्तित करना


81

मैं अपने Arduino पर एनालॉग पिंस में से एक से एक अंतर मूल्य प्राप्त कर रहा हूं। मैं इसे कैसे संक्षिप्त करूं Stringऔर फिर Stringइसे एक में परिवर्तित char[]करूं?

यह सुझाव दिया गया था कि मैं कोशिश करता हूं char msg[] = myString.getChars();, लेकिन मुझे एक संदेश मिल रहा है जो getCharsमौजूद नहीं है।


7
क्या आपको वास्तव में एक परिवर्तनीय सरणी की आवश्यकता है? यदि नहीं, तो आप उपयोग कर सकते हैं const char * msg = myString.c_str();। इसके विपरीत toCharArray(), c_str()एक शून्य-कॉपी ऑपरेशन है, और स्मृति-विवश उपकरणों पर शून्य-प्रतिलिपि एक अच्छी बात है।
एडगर बोनट

@EdgarBonet यह काम करता है, लेकिन समय पर केवल एक स्ट्रिंग के लिए। अंतिम c_str () पुराने को अधिलेखित करें।
एमएमवी-आरयू

जवाबों:


134
  1. किसी पूर्णांक को बदलने और जोड़ने के लिए, ऑपरेटर + = (या सदस्य फ़ंक्शन concat) का उपयोग करें:

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. स्ट्रिंग को टाइप के रूप में प्राप्त करने के लिए char[], CharArray () का उपयोग करें :

    char charBuf[50];
    stringOne.toCharArray(charBuf, 50)
    

उदाहरण में, केवल 49 वर्णों के लिए स्थान है (मान लें कि यह शून्य से समाप्त हो गया है)। आप आकार को गतिशील बनाना चाह सकते हैं।

भूमि के ऊपर

में लाने की लागत String(यह स्केच में कहीं भी उपयोग नहीं होने पर शामिल नहीं है), लगभग 1212 बाइट्स प्रोग्राम मेमोरी (फ्लैश) और 48 बाइट्स रैम है।

यह Arduino लियोनार्डो स्केच के लिए Arduino IDE संस्करण 1.8.10 (2019-09-13) का उपयोग करके मापा गया था ।


13
मुझे बहुत सारे समय की बचत की। धन्यवाद! चार [] आकार को गतिशील बनाने के लिए, कुछ ऐसा करेंchar charBuf[stringOne.length()+1]
loeschg

9
मैंने इसे गतिशील रूप से इस तरह किया:char ssid[ssidString.length()]; ssidString.toCharArray(ssid, ssidString.length());
dumbledad

1
@loeschg धन्यवाद, मैंने +1पहले बिना कोशिश की , लेकिन आपके समाधान ने मेरे लिए काम किया!
ब्लंडरिंग फिलोसोफर


1
बहुत अच्छा जवाब! एक और!
डैमियन राफेल लाॅटर्नो

57

बस एक संदर्भ के रूप में है, तो यहां के बीच परिवर्तित करने के लिए एक उदाहरण है Stringऔर char[]एक गतिशील लंबाई के साथ -

हां, यह एक प्रकार के रूपांतरण के रूप में सरल रूप से किसी चीज़ के लिए दर्दनाक है, लेकिन दुख की बात है कि यह सबसे आसान तरीका है।


14

आप इसे char * में बदल सकते हैं, अगर आपको उपयोग करके एक परिवर्तनीय स्ट्रिंग की आवश्यकता नहीं है:

(char*) yourString.c_str();

यह बहुत उपयोगी होगा जब आप Arduino में MQTT के माध्यम से एक स्ट्रिंग चर प्रकाशित करना चाहते हैं।


1

उस सामान में से किसी ने काम नहीं किया। यहाँ एक बहुत आसान तरीका है .. लेबल str एक सूचक के लिए एक सरणी है ...

String str = String(yourNumber, DEC); // Obviously .. get your int or byte into the string

str = str + '\r' + '\n'; // Add the required carriage return, optional line feed

byte str_len = str.length();

// Get the length of the whole lot .. C will kindly
// place a null at the end of the string which makes
// it by default an array[].
// The [0] element is the highest digit... so we
// have a separate place counter for the array...

byte arrayPointer = 0;

while (str_len)
{
    // I was outputting the digits to the TX buffer

    if ((UCSR0A & (1<<UDRE0))) // Is the TX buffer empty?
    {
        UDR0 = str[arrayPointer];
        --str_len;
        ++arrayPointer;
    }
}

strएक सरणी के लिए सूचक नहीं है, यह ऑपरेटर को Stringलागू करने वाली एक वस्तु है []
gre_gor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.