Hallo ich bastle gerade an meiner Funkuhr und möchte folgenden String über die serielle Schnitstelle schicken: <STX>D:tt.mm.jj;T:w;U:hh.mm.ss<ETX> Ich habe folgendes Printf-Statement: printf("\x02D:%d.%d.%d;T:?;U:%d.%d.%d\x03",day,mon,year,hh,mm,ss); mein problem ist nun dass am Anfang ein - kommt es soll aber <STX>D:24.02.2007;T:?;U:20.16.58<ETX> kommen 1. Problem warum kommt kein <STX>D am Anfang? 2. Problem die Ziffern sollen immer 2 stellig ausgegeben werden, falls 1 stellig sool ne führende 0 ausgegeben werden Frage hierzu: Kann man das mit nem Formatstring machen? Oder nur mit Programmlogik? Kann mir BITTE jemand weiterhelfen, ich bin schon am verzweifeln.... MfG Achim Terminal Trace..... 2D - Mein Problem 3A : 32 2 34 4 2E . 32 2 Mein Problem 2E . 32 2 30 0 30 0 37 7 3B ; 54 T 3A : 3F ? 3B ; 55 U 3A : 32 2 30 0 2E . 31 1 36 6 2E . 35 5 38 8 03 <ETX>
Zu dem Fehler kann ich nichts sagen, aber 2 stellig geht so: %02d 0: mit 0er Auffüllen 2: 2 Stellen
Hallo @Benedikt Vielen Dank, Punkt 2 ist erledigt (wer lesen kann ist klar im Vorteil RTFM) Problem 1 bleibt..... Falls ich printf("\x02 D:%d.%d.%d;T:?;U:%d.%d.%d\x03",day,mon,year,hh,mm,ss); also zwischen \02 und D ein ' ' "einschiebe kommt es fast so raus wie ich möchte, aber eben ein BLANK welches ich nicht haben möchte.... also <STX> D ich möchte aber <STX>D Kann mir noch jemand helfen?
Klar, ist ganz einfach: \x02D ergibt das Zeichen 0x002D. Da du nur 8-bit-Zeichen benutzt, wird es auf 0x2D (ASCII Minus) eingekürzt. ANSI C89 (alias ISO C90) hat dafür den Trick eingeführt, dass zwei unmittelbar aufeinander folgende string literals zu einem einzigen verkettet werden, du schreibst also
1 | "\x02" "D..." |
Wenn du das noch etwas schicker machen willst, nimmst du
1 | #define STX "\x02"
|
2 | |
3 | ...
|
4 | printf(STX "D...", ...); |
Hallo @Jörg, herzlichen Dank! Du hast den Abend gerettet! Wie kann man das aus dem Manuals rauslesen..... Ich hatte ne Quelle da stand \xnn wobei nn Hexziffern sind. Ich dachte das sind 2 Hexziffern. Was wäre dann \x123456789ABCDEF bei byte nur das EF... kann der HEX String beliebig lang sein und wird abhängig vom Datentyp von hinten interpretiert..... Danke Achim
Ja, der Hexstring kann beliebig lang sein, er wird erst durch das erste nicht-hex-Zeichen beendet. Im Gegensatz dazu wird eine Oktalfolge \NNN durch wahlweise das erste nicht-oktal-Zeichen oder das vierte Zeichen nach dem Backslash beendet. Sollte aber im K&R eindeutig beschrieben sein, im Standard steht es auf jeden Fall eindeutig.
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.