Hallo Leute hab zu sprintf folgende hilfe gefunden: http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html Mir is leider nicht ganz klar, wie ich die anderen parameter wie [width][.precision][length] angebe...? So sieht mein Code bis jetzt aus: sprintf(OutBuff, "%X", data); Die parameter die ich noch angeben möchte sind: 1.) left-justify within the given field width 2.) field width Hab auch schon gegoogelt, leider nichts hilfreiches gefunden: Des weitern wollte ich fragen, ob es eine Möglichkeit gibt, die Null-Terminierung von sprintf auszuschalten? schöne Grüße
Beispiele: data = 0x1234; sprintf(OutBuff, "%07X", data); -> "0001234" sprintf(OutBuff, "%7X", data); -> " 1234" (drei Leerzeichen davor) sprintf(OutBuff, "%-7X", data); -> "1234 " (drei Leerzeichen dahinter) Wie genau möchtest Du Deinen Wert formatiert ausgeben?
Chriss wrote: > Hallo Leute > > hab zu sprintf folgende hilfe gefunden: > http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html > > Mir is leider nicht ganz klar, wie ich die anderen parameter wie > [width][.precision][length] > angebe...? Einfach in den Format String reinschreiben. > > So sieht mein Code bis jetzt aus: > sprintf(OutBuff, "%X", data); sprintf( OutBuff, "%3X", data); spezifiziert eine Feldbreite von 3 Zeichen sprintf( OutBuff, "%03X", data); Feldbreite von 3 Zeichen. Mit 0-en auffüllen. Wie jetzt left-justify im Formatstring angegeben wird, weiss ich nicht auswendig. Ich nehme mal an durch ein '-' also sprintf( OutBuff, "%-03X", data ); also einfach alles was du haben willst zwischen % und dem Datentyp-Spezifizierer in der Richtigen Reihenfolge hineinpacken. Die Welt kann manchmal so einfach sein :-) > Des weitern wollte ich fragen, ob es eine Möglichkeit gibt, die > Null-Terminierung von sprintf auszuschalten? Nein. Wozu willst du das? sprintf erzeugt einen C-String. Und ein C-String ist immer mit '\0' terminiert. Ansonsten wäre es kein C-String.
>> Des weitern wollte ich fragen, ob es eine Möglichkeit gibt, die >> Null-Terminierung von sprintf auszuschalten? > Nein. Wozu willst du das? > sprintf erzeugt einen C-String. Und ein C-String ist *immer* > mit '\0' terminiert. Ansonsten wäre es kein C-String. Ich habe eine funktion, die mir, aus mehreren parametern einen frame zum übertragen über den uart zusammenstöpselt: generate_send_frame(u8 source, u8 destination, u16 command,...) so etwa in der art... diese funktion generiert mir dann mit den daten die ich übergebe mein frame in einem byte array das dann über den uart gesendet werden kann. Und genau hier verwende ich eben das sprintf, da ich zwischen start und endzeichen nur ascii zeichen übertrage. schöne Grüße
Chriss wrote: > so etwa in der art... > diese funktion generiert mir dann mit den daten die ich übergebe mein > frame in einem byte array das dann über den uart gesendet werden kann. > Und genau hier verwende ich eben das sprintf, da ich zwischen start und > endzeichen nur ascii zeichen übertrage. Wenn du sowieso eigene Ende-Zeichen benutzt, dann stört doch das terminierende '\0' nicht weiter. Es hilft allerdings sehr, wenn du auf den String Funktionen wie strlen, strcpy, strcat, etc... anwenden willst .-)
Karl heinz Buchegger: Danke Auf jeden Fall ein großes Lob an dich, hast mir schon mehrmals geholfen... Mach weiter so! schöne Grüße
Folgender Code funktioniert bei mir nicht richtig:
1 | #include <stdio.h> |
2 | uint8_t i; |
3 | const uint32_t Device_Serial2 = 0x00; |
4 | i = sprintf( signatureString, "%08X", Device_Serial2 ); |
Compiler ARM GCC von CrossWorks. In signatureString steht 8X Ich erwarte eigentlich 00000000 da ich den String gerne als hexadezimalen String mit fester Länge von 8 Zeichen hätte - egal wie groß Device_Serial2 tatsächlich ist. Was stimmt bei den Formatierungsparametern nicht? Mit "%X" bekomme ich ein hex Ergebnis, aber leider ohne führende Nullen... Unterstützt sprintf die Optionen nicht?
Das 0 in %08X muß eine Null sein, kein goßes Ohhh. Was ist es bei dir? Ich kann das auf meine alten Tage schlecht unterscheiden. Ansonsten kann es auch sein, daß du ein abgemagertes sprintf hast, das nciht alle Formatoptionen kennt. Mal die eigene Doku lesen könnte helfen.
Christian schrieb: > Unterstützt sprintf die Optionen nicht? Im ARM CrossWorks Version 2.1 PDF Reference Manual gefunden: Some CrossWorks library variants do not support width and precision specifiers in order to reduce code and data space requirements; please ensure that you have selected the correct library in the Printf Width/Precision Support property of the project if you use these.
Klaus Wachtler schrieb: > Das 0 in %08X muß eine Null sein, kein goßes Ohhh. > Was ist es bei dir? Es ist die korrekte Null. > Ich kann das auf meine alten Tage schlecht unterscheiden. Tip: Richtige Schriftart verwenden. Die mit neueren Windows-Versionen mitgelieferte "Consolas" zeigt bei beliebigen Schriftgrößen immer klar unterscheidbare Glyphen für 0O, I1l und die Satzzeichen. Alternativ wäre auch "Andale Mono" oder deren ältere Variante "Monotype.com" zu verwenden.
Danke, das war der entscheidende Tipp !!! Printf Width Precision Supported in den Project Properties auf Yes setzen und dann geht es!
Rufus Τ. Firefly schrieb: > Tip: Richtige Schriftart verwenden. Danke, stimmt im Prinzip. Eigentlich schaffe ich das meistens noch ganz gut, zumindest mit Brille. Aber tückischerweise nimmt das Board bei Quelltext mehrere Schriftarten; siehe Bild. Im 0x00 in der Initialisierung ist definitiv eine andere Null zu sehen als im Formatstring; deshalb hatte ich den Verdacht. Kann man das nicht geschickter machen?
Klaus Wachtler schrieb: > Aber tückischerweise nimmt das Board bei Quelltext mehrere Schriftarten; > siehe Bild. Hmm. Bei Dir verwendet das Board anscheinend die Courier und nutzt für das Syntax-Highlighting auch noch unterschiedliche Schriftschnitte (Fett/normal). Das sieht bei mir nicht so aus. Beiliegender Screenshot zeigt Safari unter OS X 10.6, aber mit Firefox 5 unter XP sieht das bei mir nicht anders aus. (Wichtig: Da der Screenshot kleiner ist als das Vorschaubildchen, wird er hier leicht vergrößert dargestellt, was ihn zu Matsch macht. Draufklicken, dann wird er etwas kleiner) Die Schriftart lässt sich unter FF einstellen: Im Einstellungsdialog die Seite "Inhalt" aufmachen, dort im Abschnitt "Schriftarten & Farben" auf den "Erweitert"-Knopf klicken und unter "Feste Breite" die gewünschte andere Schriftart einstellen. Mein Screenshot zeigt die oben schon erwähnte "Consolas".
Wenn man etwas weniger Speicher verwenden will, dann geht auch diesen Libs von ChAN: "Embedded printf module for AVR" http://elm-chan.org/docs/avrlib/xitoa.zip Geschrieben hat er auch noch diese hier: "Embedded String Functions" http://elm-chan.org/fsw/strf/xprintf.html Man beachte die DEFINES, damit lässt sich viel CODE einsparen !
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.