Forum: Compiler & IDEs Was bedeutet diese Befehlszeile?


von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hi Leute,

hab da so ein kleinen Problem bezüglich einer Codezeile.
Ich verstehe sie einfach nicht. Habe sie schon auseinandergenommen und 
nur Teile davon ausgeführt aber irgendwie komme ich nicht dahinter. 
Vieleicht könnt ihr mir helfen.
1
printf("\x02R%.2X%.2X%.2X%.2X%.2X\x03\r", tag[0], tag[1], tag[2], tag[3], tag[4]);

von Johannes M. (johnny-m)


Lesenswert?

Es werden fünf Variablen (tag[0]...tag[4]) ausgegeben, und zwar jeweils 
2-stellig in Hexadezimal mit Großbuchstaben (ohne Angabe der minimalen 
Feldbreite, deshalb keine Angabe vor dem Punkt). Am Anfang wird ein STX 
(0x02, Start of text)-Zeichen, ein 'R' und am Ende ein ETX (0x03, End of 
text) ausgegeben.

"Befehle" gibt es in C übrigens nicht, nur Anweisungen und Operatoren...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die \x02 und \x03 ergeben die ASCII-Zeichen <STX> und <ETX>, sowas
nimmt man gern für einfaches RS-232-Framing.

Das R wird 1:1 ausgegeben.

Die %.2X führen eine Hexadezimalwandlung durch, wobei als Genauigkeit
2 Stellen gefordert sind.  Das führt dazu, dass immer (mindestens)
zwei Stellen ausgegeben werden, ggf. halt mit 0 gefüllt in der 1.
Stelle.  Das Format %02X wäre ein Äquivalent dafür.  Die 10 hexadezi-
malen Stellen werden ohne Zwischenraum aneinander gefügt.

Das abschließende \r (ASCII <CR>) beendet den Datensatz.

von Johannes M. (johnny-m)


Lesenswert?

Upps, das '\r' hatte ich glatt übersehen...

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Danke für die Antworten. Ich möchte nämlich den Inhalt der Variablen mit 
einem festen Wert vergleichen.

von Johannes M. (johnny-m)


Lesenswert?

Robin Tönniges wrote:
> Danke für die Antworten. Ich möchte nämlich den Inhalt der Variablen mit
> einem festen Wert vergleichen.
Und was hat das jetzt mit der Frage zu tun? Wäre mir neu, dass man mit 
printf irgendwas vergleichen kann...

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Ne. Aber ich wusste nicht was in den Variablen drin ist. Weil da die 
Ausgabe so krass formatiert war.

von Johannes M. (johnny-m)


Lesenswert?

Aha...

von Stefan (Gast)


Lesenswert?

Eine Formatierung der Ausgabe hat normalerweise niemals einfluss auf den 
Inhalt der Variable... Deshalb ist dieser printf-Ausdruck unerheblich 
für dein eigentliches Problem. Schau lieber mal von welchem Typ die 
Variablen sind und wo sie initialisiert/zugewiesen/geändert werden.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Stefan wrote:
> Eine Formatierung der Ausgabe hat normalerweise niemals einfluss auf den
> Inhalt der Variable...

Das ist richtig. Aber ich kann ja nicht einfach in die Variable 
reingucken. Sondern muss es irgendwie ausgeben. Und wenn ich einfach

printf(tag[0]);

gemacht habe kam nichts raus.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robin Tönniges wrote:

> Und wenn ich einfach
>
> printf(tag[0]);
>
> gemacht habe kam nichts raus.

Vermutlich, weil dann der anderen Seite das <STX>-<ETX>-<CR>-Framing
fehlt.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Nö wieso. Ganz normales Terminal benutzt. Häte auch ohne gehen müssen.

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.