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
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 .-)
Folgender Code funktioniert bei mir nicht richtig:
1
#include<stdio.h>
2
uint8_ti;
3
constuint32_tDevice_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.
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".