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'};
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.
Hört sich interessant an, werd ich testen. danke!
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.