arrays - length - ¿Tiene Arduino el método.toCharArray() tiene un error?
tochararray example (1)
toCharArray
copiará tantos caracteres en el búfer como sea posible mientras devuelve una cadena C válida . Una cadena C válida tiene un byte de terminación nul (00). Si le das un búfer de 2 bytes, puede caber solo un carácter antes del terminador nul.
(Mire la fuente de Arduino donde calcula cuántos caracteres copiar. Https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/WString.cpp#L544 The bufsize - 1
es donde está dejando espacio para un terminador nulo.)
Tu código debe ser char myarray[3]; // Make room for 2 chars + nul terminator line.toCharArray(myarray, sizeof(myarray)); // Use sizeof to avoid repeating ''2''
char myarray[3]; // Make room for 2 chars + nul terminator line.toCharArray(myarray, sizeof(myarray)); // Use sizeof to avoid repeating ''2''
Pero realmente, no necesitas un buffer para copiar en absoluto. String ya tiene un acceso de caracteres, charAt()
Serial.print(line.charAt(0), HEX); Serial.print(line.charAt(1), HEX);
Serial.print(line.charAt(0), HEX); Serial.print(line.charAt(1), HEX);
Supongamos que tengo una cadena "AB", que quiero convertir a una matriz char [] e imprimo los dos elementos de matriz char en HEX en el monitor serie. Debería ser bastante simple. Sin embargo, el segundo elemento siempre se imprime como 0.
String line = "AB";
Serial.println();
Serial.print(line);
Serial.println();
char myarray[2];
line.toCharArray(myarray,2);
Serial.print(myarray[0],HEX);
Serial.print('' '');
Serial.print(myarray[1],HEX);
Serial.print('' '');
La salida que obtengo es
AB
41 0