www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Routine sprintf


Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand eine Idee, wie ich eine variable Anzahl von Integer-Werten in 
einen einzelnen String einfüge (dieser wird anschließend mittels SCI 
gesendet).
Bei der Nutzung von sprintf kann man ja nur eine definierte Anzahl an 
Werten zum String hinzufügen. Diese Anzahl muss jedoch variabel 
gestaltet werden.
Gibt es irgendwo eine fertige Routine hierfür?

Danke schonmal

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Diese Anzahl muss jedoch variabel gestaltet werden.

Eine Möglichkeit bestünde darin, eine Funktion mit variabler 
Argumentenliste (...) zu verwenden und über die in stdarg.h definierten 
Funktionen va_start/va_end die Anzahl der Argumente zu bestimmen, daraus 
dynamisch den Formatstring durch ausreichend häufiges zusammenfügen von 
"%d " zu generieren. Der so erzeugte Formatstring wird dann vsprintf 
zusammen mit der von va_start erzeugten Argumentenliste übergeben.

Nur: Wozu braucht man sowas?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maik wrote:
> Hat jemand eine Idee, wie ich eine variable Anzahl von Integer-Werten in
> einen einzelnen String einfüge (dieser wird anschließend mittels SCI
> gesendet).
> Bei der Nutzung von sprintf kann man ja nur eine definierte Anzahl an
> Werten zum String hinzufügen. Diese Anzahl muss jedoch variabel
> gestaltet werden.
> Gibt es irgendwo eine fertige Routine hierfür?

itoa() macht dir die Konvertierung eines Wertes in einen
ASCII String. Das ganze dann in einer Schleife und die
Einzelteile mittels strcat zusammensetzen.

http://www.mikrocontroller.net/articles/FAQ#itoa.28.29
http://www.mikrocontroller.net/articles/FAQ#Wie_fu...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder aber natürlich:
Du sparst dir das zusammensetzen eines kompletten Strings
und bringst die Einzelteile nacheinander auf den Weg.

So in etwa

  int Werte[20];
  char Buffer[100];

  ....


  for( i = 0; i < 20; ++i ) {
    itoa( Werte[i], Buffer, 10 );
    TransmitString( Buffer );
    if( i != 19 )
      TransmitString( "," );
  }

ist die allereinfachste und resourcenschonendste Variante.

Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Dir, das läuft----zwar mit sprintf--weil der compiler(iccarm) 
irgendwie itoa nicht kennt und noch irgendwie in einer 
Endlosschleife--:-(

Aber ansonsten hat es mir viel geholfen.

Gruß Maik

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.