Sunday, 18 June 2017

C Printf Char Binary Optionen


Drucken von formatierten Daten in stdout Schreibt die C-Zeichenfolge nach Format auf die Standardausgabe (stdout). Wenn das Format Format-Spezifizierer (Teilsequenzen beginnend mit) enthält, werden die folgenden zusätzlichen Argumente formatiert und in die resultierende Zeichenfolge eingefügt, die ihre jeweiligen Spezifizierer ersetzt. Parameter format C string, der den Text enthält, der in stdout geschrieben werden soll. Es kann optional eingebettete Format-Spezifizierer enthalten, die durch die in nachfolgenden zusätzlichen Argumenten angegebenen Werte ersetzt und nach Bedarf formatiert werden. Wo der Spezifizierer-Charakter am Ende der bedeutendste Bestandteil ist, da er den Typ und die Interpretation seines entsprechenden Arguments definiert: Signierte Dezimal-Ganzzahl Unsigned decimal integer Unsigned hexadezimaler Integer Unsigned hexadezimaler Integer (Großbuchstabe) Dezimaler Gleitkomma, Kleinbuchstabe Dezimaler Gleitpunkt, Großbuchstabe Wissenschaftliche Notation (Mantissenexponent), Kleinbuchstabe Wissenschaftliche Notation (Mantissenexponent), Großbuchstabe Verwenden Sie die kürzeste Darstellung: e oder f Verwenden Sie die kürzeste Darstellung: E ​​oder F Hexadezimaler Gleitkomma, Kleinbuchstabe Hexadezimaler Gleitkomma, Großbuchstabe Zeichenfolge Nichts gedruckt. Das entsprechende Argument muss ein Zeiger auf eine signierte int sein. Die Anzahl der bisher geschriebenen Zeichen wird an der spitzen Stelle gespeichert. Ein gefolgt von einem anderen Charakter wird ein einziges in den Stream schreiben. Der Format-Spezifizierer kann auch Unter-Spezifizierer enthalten: Flags. Breite . Präzision und Modifikatoren (in dieser Reihenfolge), die optional sind und diesen Vorgaben folgen: Linke Rechtfertigung innerhalb der vorgegebenen Feldbreite Rechtliche Rechtfertigung ist die Voreinstellung (siehe Breiten-Unterspezifizierer). Zwingt das Ergebnis mit einem Plus - oder Minuszeichen (oder -) auch für positive Zahlen vor. Standardmäßig sind nur noch negative Zahlen mit einem Vorzeichen versehen. Wenn kein Vorzeichen geschrieben wird, wird vor dem Wert ein Leerzeichen eingefügt. Gebraucht mit o. X oder X-Spezifizierer wird der Wert mit 0 überschritten. 0x bzw. 0X für Werte, die sich von Null unterscheiden. Gebraucht mit einem. EIN . E. E F. F. G oder G es zwingt die schriftliche Ausgabe, einen Dezimalpunkt zu enthalten, auch wenn keine weiteren Ziffern folgen. Wenn keine Ziffern folgen, wird kein Dezimalpunkt geschrieben. Linke Pads die Zahl mit Nullen (0) anstelle von Leerzeichen, wenn Polsterung angegeben ist (siehe Breite Sub-Spezifizierer). Für ganzzahlige Spezifizierer (d. I. O. U. X X): Präzision gibt die minimale Anzahl der zu schreibenden Ziffern an. Wenn der zu schreibende Wert kürzer als diese Zahl ist, wird das Ergebnis mit führenden Nullen aufgefüllt. Der Wert wird nicht abgeschnitten, auch wenn das Ergebnis länger ist. Eine Präzision von 0 bedeutet, dass kein Zeichen für den Wert 0 geschrieben wird. Für ein . EIN . E. E F und F-Spezifizierer: Dies ist die Anzahl der zu druckenden Ziffern nach dem Dezimalpunkt (standardmäßig ist dies 6). Für g und G-Spezifizierer: Dies ist die maximale Anzahl der signifikanten Ziffern, die gedruckt werden sollen. Für s. Dies ist die maximale Anzahl der zu druckenden Zeichen. Standardmäßig werden alle Zeichen gedruckt, bis das endgültige Nullzeichen angetroffen wird. Ist die Periode ohne expliziten Wert für Präzision angegeben. 0 angenommen wird. Die Präzision wird im Formatstring nicht angegeben, sondern als zusätzliches Integerwertargument vor dem Argument, das formatiert werden muss. Der Längenunterspezifizierer ändert die Länge des Datentyps. Dies ist ein Diagramm, das die Typen zeigt, die verwendet werden, um die entsprechenden Argumente mit und ohne Längenspezifizierer zu interpretieren (wenn ein anderer Typ verwendet wird, wird die richtige Typförderung oder Umwandlung durchgeführt, falls erlaubt): Hinweis zum c-Spezifizierer: es nimmt ein int ( Oder wintt) als Argument, sondern führt die richtige Umwandlung in einen Char-Wert (oder ein Wchart) vor der Formatierung für die Ausgabe. Hinweis: Gelbe Zeilen zeigen Spezifizierer und Unterspezifizierer an, die von C99 eingeführt wurden. Siehe ltcinttypesgt für die Spezifizierer für erweiterte Typen. . (Zusätzliche Argumente) Abhängig von der Formatzeichenfolge kann die Funktion eine Folge von zusätzlichen Argumenten erwarten, die jeweils einen Wert enthalten, der verwendet werden soll, um einen Formatspezifizierer im Formatstring (oder einen Zeiger auf einen Speicherort für n) zu ersetzen. Es sollte mindestens so viele dieser Argumente geben wie die Anzahl der in den Formatspezifizern angegebenen Werte. Zusätzliche Argumente werden von der Funktion ignoriert. Rückgabewert Bei Erfolg wird die Gesamtzahl der geschriebenen Zeichen zurückgegeben. Wenn ein Schreibfehler auftritt, wird die Fehleranzeige (Ferror) gesetzt und eine negative Zahl wird zurückgegeben. Wenn beim Schreiben von breiten Zeichen ein Multibyte-Zeichencodierungsfehler auftritt, wird errno auf EILSEQ gesetzt und eine negative Zahl wird zurückgegeben. Kompatibilität Besondere Bibliotheksimplementierungen können zusätzliche Spezifizierer und Unterspezifizierer unterstützen. Die hier aufgeführten werden durch die neuesten C - und C-Standards (beide im Jahr 2011) unterstützt, aber die in Gelb wurden in C99 eingeführt (nur für C-Implementierungen seit C11 erforderlich) und dürfen nicht von Bibliotheken unterstützt werden, die älteren Standards entsprechen. Passt Schreibstring an stdout (Funktion) scanf Lesen formatierte Daten aus stdin (Funktion) fprintf Formatierte Daten in Stream schreiben (Funktion) fwrite Schreibblock von Daten in Stream (Funktion) Funktionen: Makrokonstanten: Es gibt keinen binären Konvertierungsspezifizierer in glibc normal . Es ist möglich, benutzerdefinierte Umwandlungstypen in die Funktion printf () in glibc hinzuzufügen. Weitere Informationen finden Sie unter registerprintffunction. Sie können eine benutzerdefinierte b-Konvertierung für Ihren eigenen Gebrauch hinzufügen, wenn es den Anwendungscode vereinfacht, um ihn verfügbar zu haben. Hier ist ein Beispiel für die Implementierung eines benutzerdefinierten printf-Formats in glibc. Auch was du über w. r.t. Umgang mit mehreren Ergebnissen nacheinander ist nicht reentrancy per se, sondern einfach nur der Fallout der Verwendung, was ein globales Objekt ist, um das Ergebnis zu speichern. Die Funktion wird nicht erneut eingegeben. In C ist das richtige oder zumindest weit verbreitete Idiom für den Umgang mit Funktionen, die ihre Ergebnisse in einem globalen Objekt speichern, diese Ergebnisse sofort nach dem Erhalten zu kopieren. Dies hat den großen Vorteil, dass, wenn nur ein Ergebnis zu einem Zeitpunkt erforderlich ist, keine zusätzliche Zuordnung erforderlich ist. Ndash Greg A. Woods 27. November um 0:51 Hier müssen wir nicht einverstanden sein. Ich kann sehen, wie das Hinzufügen eines unauffälligen Präprozessor-Symbols irgendwo in die Nähe der Schädlichkeit der Begrenzung der Verwendungsfälle schwer wird, wodurch die Schnittstelle fehleranfällig ist, die permanente Speicherung für die Dauer des Programms für einen temporären Wert reserviert und einen schlechteren Code auf den meisten modernen Plattformen erzeugt . Ndash R .. Nov 27 12 at 1:53 Die printf () - Familie ist nur in der Lage, in Basis 8, 10 und 16 mit den Standard-Spezifizierer direkt zu drucken. Schlagen Sie vor, eine Funktion zu erstellen, die die Nummer in einen String pro Codes umwandelt. Alle anderen Antworten haben bisher mindestens eine dieser Einschränkungen. Verwenden Sie den statischen Speicher für den Rückkehrpuffer. Dies begrenzt die Anzahl der Zeiten, die die Funktion als Argument für printf () verwendet werden kann. Weisen Sie Speicher zu, der den Anrufcode benötigt, um Zeiger freizugeben. Benötigen Sie den Anrufcode, um explizit einen geeigneten Puffer bereitzustellen. Ruf printf () direkt an. Dies erfordert eine neue Funktion für fprintf (). Sprintf (). Vsprintf (). Etc. Verwenden Sie eine reduzierte Anzahl von ganzen Zahlen. Das Folgende hat keine der oben genannten Einschränkungen. Es erfordert C99 oder später und Verwendung von s. Es verwendet ein zusammengesetztes Literal, um den Pufferplatz zur Verfügung zu stellen. Es hat keine Probleme mit mehreren Anrufen in einem printf ().quot Ich muss dieses Zeichen als Binärzahl verarbeiten, um festzustellen, ob während des Übertragungsprozesses die Daten beschädigt worden sind. Ich bin mir nicht sicher, dass ich es verstehe. Es sieht aus wie in diesem Fall müssen Sie nicht anzeigen, dass UCHAR als Binär oder Hexe, sondern nur um einige bitweise logische Operation und Verschiebungen auf diesem UCHAR zu tun. Etwas wie das Zählen der Anzahl von 1 Bits von diesem uchar zum Beispiel: unsigned char c 93 int bitcount 0 printf (quotbitcount: dnquot, bitcount) Samstag, Dezember 09, 2006 9:11 PM Das ist genau das, was ich gesucht habe (ein tragen ). Aber mit ein paar Anpassungen an das Stück Code, das du mir gegeben hast, schaffe ich es, es unsichtbar zu machen. C cddddddddddddddddddl 10, 2006 2:20 PM Alle Antworten Für Hex-Format printf hat die x-Format-Spezifizierer, die dies tut. Für Binär können Sie itoa-Funktion verwenden: unsigned char ch 934 einige zufällige unsigned char Wert, um char text16 Puffer zu verwenden, um mit itoa printf zu verwenden (quotxnquot. Ch) hex mit x format spezifizierer itoa (ch, text, 16) hex mit itoa mit base 16 printf (quotsnquot. text) itoa (ch, text, 2) mit itoa mit base 2 printf (quotsnquot, text) Samstag, Dezember 09, 2006 7:49 PM Vielen Dank für die schnelle Antwort Dieses Stück Code funktioniert unter normalen Umständen Aber in meinem speziellen Fall ist der UCHAR Teil einer Nachricht, die von einem UART geliefert wird, an den ein Datenstrom angeschlossen ist. So muss ich dieses Zeichen als Binärzahl verarbeiten, um festzustellen, ob während des Übertragungsvorgangs die Daten beschädigt sind. Samstag, Dezember 09, 2006 8:42 PM Ich muss diesen Charakter als Binärzahl verarbeiten, um festzustellen, ob während des Übertragungsprozesses die Daten beschädigt sind. Ich bin mir nicht sicher, dass ich es verstehe. Es sieht aus wie in diesem Fall müssen Sie nicht anzeigen, dass UCHAR als Binär oder Hexe, sondern nur um einige bitweise logische Operation und Verschiebungen auf diesem UCHAR zu tun. Etwas wie das Zählen der Anzahl von 1 Bits von diesem uchar zum Beispiel: unsigned char c 93 int bitcount 0 printf (quotbitcount: dnquot, bitcount) Samstag, Dezember 09, 2006 9:11 PM Könnte ich Stück für Stück abrufen, indem ich nach rechts wechsle (Gtgt) oder nach links (ltlt) Ie Cf 66 - 01010101 Wo das letzte Bit gegangen ist. Sonntag, 10. Dezember 2006 10:02 Nein, du kannst nicht. Sie müssen das erste Bit testen, verschieben, erneut testen und so weiter. In der Assembler-Sprache kann das Bit, das ausgeht, in der Regel in etwas namens quotcarry flagquot gefunden werden und es kann dort getestet werden, aber CC hat so etwas nicht. Sonntag, 10. Dezember 2006 13:18 Das ist genau das, was ich gesucht habe (ein Trage). Aber mit ein paar Anpassungen an das Stück Code, das du mir gegeben hast, schaffe ich es, es unsichtbar zu machen. C cddddddddddddddddddl 10, 2006 2:20 PM Das sieht mir nicht richtig aus. Mittwoch, November 07, 2007 5:25 PM Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen?

No comments:

Post a Comment