Arduino에서 int 또는 String을 char 배열로 변환


81

Arduino의 아날로그 핀 중 하나에서 int 값을 얻습니다. 어떻게이을 연결 않는 String한 다음 변환 StringA를 char[]?

을 (를) 시도하도록 제안 char msg[] = myString.getChars();되었지만 getChars존재하지 않는 메시지를 받고 있습니다.


7
수정 가능한 어레이가 정말로 필요합니까? 그렇지 않은 경우 const char * msg = myString.c_str();. 와 달리 toCharArray(), c_str()는 무 복사 작업이고 무 복사는 메모리가 제한된 장치에서 좋은 것입니다.
Edgar Bonet

@EdgarBonet 작동하지만 한 번에 하나의 문자열에만 적용됩니다. 마지막 c_str ()은 이전을 덮어 씁니다.
mmv-ru

답변:


134
  1. 정수를 변환하고 추가하려면 연산자 + = (또는 멤버 함수 concat)를 사용하십시오.

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. 유형으로 문자열을 얻으려면 char[], 사용 toCharArray ()를 :

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

이 예에서는 49 자 (널로 끝나는 것으로 가정)를위한 공간 만 있습니다. 크기를 동적으로 만들 수 있습니다.

간접비

반입 비용 String (스케치에서 사용하지 않는 경우 포함되지 않음)은 약 1212 바이트 프로그램 메모리 (플래시)와 48 바이트 RAM입니다.

이것은 Arduino Leonardo 스케치를 위해 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처음에는 없이 시도 했지만 귀하의 솔루션이 저에게 효과적 이었습니다!
Blundering Philosopher


1
아주 좋은 대답입니다! 하나 추가!
Damián Rafael Lattenero

57

그냥 참고로, 여기 사이의 변환하는 방법의 예입니다 Stringchar[]동적 길이는 -

// Define 
String str = "This is my string"; 

// Length (with one extra character for the null terminator)
int str_len = str.length() + 1; 

// Prepare the character array (the buffer) 
char char_array[str_len];

// Copy it over 
str.toCharArray(char_array, str_len);

예, 이것은 유형 변환과 같은 간단한 것에 대해 고통스럽게 둔감하지만 슬프게도 가장 쉬운 방법입니다.


14

다음을 사용하여 수정 가능한 문자열이 필요하지 않은 경우 char *로 변환 할 수 있습니다.

(char*) yourString.c_str();

이것은 arduino에서 MQTT를 통해 String 변수를 게시하려는 경우 매우 유용합니다.


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.