Forum: Mikrocontroller und Digitale Elektronik Noch schlimmere Einschlaffrage: String auffüllen


von Thorsten Weiland (Gast)


Lesenswert?

Es lässt mir keine Ruhe:

Eine Funktion wird aufgerufen, die bestimmte Daten an eine bestimmte 
Postiton im Terminal wiedergeben soll.
Hier nur wichtig: Positionswerte int x und int y.

Möchte also die int´s in asciis wandeln (klappt schon) und an Stelle von 
x und y im String einfügen. Wie geht das, wenn die Werte zB zweistellig 
sind?


char string[] = {'\e','[', x ,';', y ,'H','\0'};

von Lattice User (Gast)


Lesenswert?

sprintf verwenden.

Wenn der Overhead von sprintf zu gross ist, jeweils 2 Zeichen für x und 
y reservieren und eine '0' vor einstellige Werte setzen.

von Thorsten Weiland (Gast)


Lesenswert?

Hört sich interessant an, werd ich testen.
danke!

von Karl H. (kbuchegg)


Lesenswert?

> char string[] = {'\e','[', x ,';', y ,'H','\0'};

Du brauchst ein C-Buch!

Stringverarbeitung ist die erste große Hürde in der C-Programmierung. 
Ohne Anleitung wird das nichts.

In der Zwischenzeit, bis du dein Buch hast, kannst du hier die absoluten 
Basics nachlesen.

http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

1
   char tmp[10];
2
   char result[20];
3
4
   strcpy( result, "\e[" );
5
6
   itoa( tmp, x, 10 );
7
   strcat( result, tmp );
8
9
   strcat( result, ";" );
10
11
   itoa( tmp, y, 10 );
12
   strcat( result, tmp );
13
14
   strcat( result, "H" );


Nachdem du Stringverarbeitung einigermassen gemeistert hast, warten noch 
viele andere Hürden in der C-Programmierung auf dich. Daher brauchst du 
ein vernünftiges Buch, denn keiner hat hier Lust, dir in endlosen 
Postings das beizubringen, was du in jedem Buch auf 25 Seiten 
ausführlichst auch selber nachlesen kannst.

von Thorsten ". (Gast)


Lesenswert?

Wird beherzigt.

Das x und y in
> char string[] = {'\e','[', x ,';', y ,'H','\0'};
habe ich jedoch nur als Platzhalter eingefügt ohne Hoffnung auf 
Klappung. Meine Hoffnung war, den gesamten string in einer Zeile 
schreiben zu können, da noch vieleviele weitere dieser strings für den 
gesamten Bildschirminhalt dazukommen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Thorsten ". schrieb:
> Meine Hoffnung war, den gesamten string in einer Zeile
> schreiben zu können, da noch vieleviele weitere dieser strings für den
> gesamten Bildschirminhalt dazukommen.

Soll das ein µC- oder ein PC-Programm werden? Das sieht nach einer 
Ansteuerung/Cursorpositionierung eines ANSI/VT100/VT200-kompatiblen 
Terminals aus...

Auf einem PC kannst Du ohne Gewissensbisse einfach:

  printf ("\e[%d;%dH", x, y);

aufrufen, das sollte Deinen Cursor an die richtige Stelle setzen ;-)

Auf einem µC empfiehlt sich dann die Verwendung von sprintf() (mit 
entsprechendem Speicherplatzverbrauch) oder die Lösung von Karl Heinz. 
Im letzteren Fall würde ich an Deiner Stelle entsprechende Funktionen 
schreiben, die die Terminal-Steuerung abdecken, wie zum Beispiel:
1
void gotoxy (uint8_t x, uint8_t y)
2
{
3
   ... // Lösung von Karl Heinz
4
}
5
6
void reverse_on (void)
7
{
8
   strcpy (result, "\e[5m" );
9
   ...
10
}
11
12
void reverse_off (void)
13
{
14
   strcpy (result, "\e[0m" );
15
   ...
16
}

usw. usw.

Vielleicht solltest Du Dir wirklich erstmal ein gutes C-Buch schnappen. 
Stringbearbeitung in C muss man verstehen....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.