Spørsmål:
Konverter int til char []
ATE-ENGE
2017-07-25 01:21:40 UTC
view on stackexchange narkive permalink

Jeg ønsker å konvertere en int-verdi til en char-array. For øyeblikket har jeg funnet at følgende vil returnere [nummer ]

  int num = [number] str = String (num); str.toCharArray (cstr, 16) ; Serial.println (cstr);  

Imidlertid, i henhold til Majenkos The Evils of Arduino Strings, føler jeg at denne koden ville få Arduinos haug til å se ut som sveitsisk ost. Er det en bedre måte å endre en [int] til en char [n] matrise som unngår S tring-klassen?

En svar:
Majenko
2017-07-25 01:26:43 UTC
view on stackexchange narkive permalink

itoa er den beste ruten:

  int num = 1234; char cstr [16]; itoa (num, cstr, 10); - > "1234 " 

Du kan lese mer om å bruke det her.

Hvis du vil ha mer kontroll over formatet på nummeret (og ikke husk den økte PROGMEM-bruken), kan du bruke sprintf (eller den sikrere snprintf ) for å formatere den:

  sprintf (cstr, "% 05d", num); - > "01234"  

Eller med PROGMEM-strengkonstant:

  sprintf_P (cstr, (PGM_P) F (" % 05d "), num); - >" 01234 " 

Eller med flere verdier:

  sprintf_P (cstr, (PGM_P) F ("% 02d:% 02d:% 02d "), timer, minutter, sekunder); - >" 03:23:11 " 
Hyggelig, jeg ønsker å ta en int-verdi i sekunder og konvertere til hr: min: sec før jeg `strcat ([c string], [time])` som jeg forstår, må jeg holde meg med `itoa` siden jeg ikke vil at det skal gå til serie?
sprintf er et godt valg. Jeg legger til et eksempel.
Ok, det ser ut til at det vil fungere for meg. hvordan går du frem for å få seksjonen `(PGM_P) F ("% 02d:% 02d:% 02d ")? (spesielt `(PGM_P) F`-delen)
F er dokumentert i arduino PROGMEM-dokumentene. PGM_P endrer bare pekeren til riktig type for_P variantfunksjoner.


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...