Wednesday 12 July 2017

Itoa Alternative Binäre Optionen


C ProgrammierungC Referencestdlib. hitoa Die Funktion itoa (i nteger to A SCII) ist eine weit verbreitete, nicht standardmäßige Erweiterung der Standard-Programmiersprache C. Es kann nicht portabel verwendet werden, da es in keinem der C-Sprachstandards definiert ist. Allerdings liefern Compiler es oft über den Header ltstdlib. hgt im nicht konformen Modus, da es sich um ein logisches Gegenstück zur Standardbibliotheksfunktion atoi handelt. Void itoa (int input, char buffer, int radix) itoa nimmt den Integer-Eingangswert-Eingang und wandelt ihn in eine Zahl im Basis-Radix um. Die resultierende Zahl (eine Folge von Basis-Radix-Ziffern) wird in den Ausgangspufferpuffer geschrieben. Abhängig von der Implementierung kann itoa einen Zeiger auf das erste Zeichen in Puffer zurückgeben. Oder kann so konzipiert sein, dass das Durchlaufen eines Nullpuffers die Funktion veranlasst, die Länge des Strings zurückzugeben, der in einen gültigen Puffer geschrieben worden wäre. Für die Umwandlung einer Zahl in einen String in Basis 8 (Oktal), 10 (dezimal) oder 16 (hexadezimal) ist eine standardkonforme Alternative die Standardbibliotheksfunktion sprintf zu verwenden. Die Funktion itoa erschien in der ersten Auflage von Kernighan und Ritchies Die C Programmiersprache. Auf Seite 60. Die zweite Auflage der C Programming Language (KampR2) enthält die folgende Implementierung von itoa. Auf Seite 64 für spanische Ausgaben gehen auf Seite 47. Das Buch stellt einige Probleme mit dieser Implementierung fest, einschließlich der Tatsache, dass es nicht korrekt mit der negativsten Nummer 2 Worte-1 umgeht. 1 Die oben verwendete Funktion umgekehrt ist zwei Seiten früher implementiert: Eine itoa-Funktion (und eine ähnliche Funktion, die einen Float in einen String umwandelte) wurde im Unix-Handbuch der ersten Auflage aufgelistet. 2 Im Gegensatz zu den oben genannten Versionen hatte die Unix-Bibliotheksversion eine Schnittstelle, die ungefähr gleichbedeutend war mit void itoa (int input, void (subr) (char)) und würde die Callbackroutine subr auf jedem Zeichen in der Ausgabezeichenfolge aufrufen, wodurch die Notwendigkeit beseitigt wird Für einen Puffer groß genug, um die gesamte Saite zu halten. Itoa () Implementierungen mit Performance-Tests lexicalcast - C Alternative, Teil der Boost-Bibliotheken modpnumtoa - CC Alternative zum Umwandeln von Integern und Floats in Char-Puffer. Gute alte Integer zu Ascii Umwandlung: itoa - Eine weitere schnelle Implementierung von itoa für verschiedene Datentypen, plus einige Boost-Stil Wrapping in Form von Boost :: lexicalcast Vorlage Spezialisierungen. Ich denke, die Memcpy ist gelungen. Memcopy wird die Bytes kopieren und die Bytes nicht in Zeichen übersetzen (wie du willst). Sie können nicht sehen, weil 534 zufällig zwei nicht druckbare Zeichen produziert. Versuchen Sie, 18505 zu verwenden und eine Nachricht auszudrucken. Nicht was du aber willst Wenn itoa nicht verfügbar ist, dann könntest du immer dein eigenes schreiben. In der Tat das ist eine gemeinsame Informatik Hausaufgabe Problem. Um dies zu tun, musst du jede Ziffer von der Ganzzahl getrennt haben (Hinweis Integer Division wird abschneiden - genau das, was wir wollen) und youll müssen jede Ziffer von einer ganzen Zahl zwischen 0 und 9 und ihre ascii Darstellung umwandeln. Das ist genug Hinweise, aber wenn Sie mehr Hilfe benötigen, dann fühlen Sie sich frei zu fragen. Beantwortet Sep 16 10 bei 10:08 Wenn itoa falls vorhanden du kannst es verwenden, ist diese Funktion nicht Teil von C, sondern wird von einigen Compilern unterstützt. Alternativ können Sie tun: beantwortet Sep 16 10 um 9:42 Es ist Teil der C-Standard-lib so krank in irgendwelchen konforme C oder c Compiler ndash Mark Sep 16 10 bei 9:43 itoa ist nicht verfügbar ndash Alex Sep 16 10 at 9:44 Mark: Nein, es ist kein Teil der C-Standardbibliothek. Die C-Standardfunktion dazu ist sprintf (). Ndash caf Sep 16 10 at 11:19 Ok ich misse einige der Man-Seiten etc ndash Mark Sep 16 10 um 14:24 Sie können auch isingsstreamstream: beantwortet Sep 16 10 at 9:52 1 für einen C-Ansatz Ist das wirklich funktioniert Obwohl ich nicht sicher bin. Ich benutze ostringstream oss oss ltlt Feld und benutze oss. str () anstelle eines Puffers. Ndash Tony D Sep 16 10 at 11:46 Ihre Methode wird nicht zu arbeiten, weil sowohl die Verschlüsselung von Zeichen und die Tatsache 9 9. Aber warum nicht nur bauen Sie Ihre eigenen itoa Seine sehr einfach (Hinweis: x - 0 wird 0 - 9 in 0 - 9), alternativ nur kopieren Sie die Quelle für eine itoa varient von einer der Open-Source-libstdcsArcheology itoa war eine Nicht-Standard-Helfer-Funktion entwickelt, um die atoi Standard-Funktion zu ergänzen, und wahrscheinlich versteckt ein Sprintf (die meisten seiner Funktionen können In sprintf umgesetzt werden): cplusplusreferenceclibrarycstdlibitoa. html Verwenden Sie sprintf. Oder snprintf. Oder welches Werkzeug du findest. Trotz der Tatsache, dass einige Funktionen nicht im Standard sind, wie von einem in einem seiner Kommentare richtig erwähnt, wird der meisten Compiler Ihnen eine Alternative (z. B. Visual C hat seine eigene snprintf können Sie typedef zu snprintf, wenn Sie es brauchen). Der C-Weg Verwenden Sie die C-Ströme (im aktuellen Fall std :: stringstream (oder sogar die veraltete std :: strrom, wie von Herb Sutter in einem seiner Bücher vorgeschlagen, weil es etwas schneller). Fazit Youre in C, was bedeutet, dass Sie können Wählen Sie die Art und Weise, wie Sie es wollen: Der schnellere Weg (dh der C-Weg), aber Sie sollten sicher sein, dass der Code ein Engpass in Ihrer Anwendung ist (vorzeitige Optimierungen sind böse, etc.) und dass Ihr Code sicher verkapselt ist, um zu vermeiden, dass Puffer gefahren wird Überholt, der sicherere Weg (dh der C-Weg), wenn du diesen Teil des Codes kennst, ist nicht kritisch, also sei sicher sicher, dass dieser Teil des Codes nicht zufällig auf Momente zerbricht, weil jemand eine Größe oder einen Zeiger verwechselt hat (was passiert Echtes Leben, wie, gestern, auf meinem Computer, weil jemand es für kühl gehalten hat, den schnelleren Weg zu benutzen, ohne es wirklich zu brauchen.) Chris Kaminski: Wenn du die C stream39s-Schnittstelle studierst, verstehst du, warum sie langsamer sind, auch wenn sie einfach sind Integer: In C benutzt du deinen eigenen Puffer, der eventuell im Stack zugewiesen ist, während in C der Stringstream seine eigene verwendet. In C kannst du deinen Puffer wiederverwenden. In C müssen Sie den String aus dem Stringstream extrahieren, der eine std :: string copy ist. Ndash paercebal 31. Mai 10 um 9:10 fuzzyTew: 1 In meinem Beitrag sprach ich über sprintf und seine sicheren Varianten, nicht nur sprintf. 2 Wissend, wo dein Code kompiliert ist, ist keine unmögliche Aufgabe (in meinem Fall, im schlimmsten Fall, WindowsVC, SolarisCC und Linuxg, bestenfalls nur WindowsVC). 3 Sie beschreiben eine Welt, in der Saboteure versuchen, Ihren Code zu stürzen, sind die Norm. Meine Welt ist von normalen Entwicklern komponiert, so dass die Zeit zu verlieren versucht, meinen Code von Saboteuren zu schützen, indem ich meine quotsecurequot Version jeder API umschreibe ist nicht produktiv. . Ndash paercebal Sep 8 11 um 11:06 fuzzyTew:. Fazit Verwenden Sie das beste Werkzeug zur Hand. Und wenn das beste Werkzeug ist ein Sprintf versteckt in einer Wrapper-Klasse oder Funktion. Nun, wenn Sie das Umschreiben von sprintf als Antwort für diese Frage befürworten, fühlen Sie sich frei, Ihre eigene Antwort zu schreiben. I39m nicht sicher, die Frage Autor liest alle Kommentare. Ndash paercebal Ich schrieb diese Thread-Safe-Funktion vor einiger Zeit, und bin sehr zufrieden mit den Ergebnissen und das Gefühl der Algorithmus ist leicht und schlank, mit Leistung, die etwa 3X die Standard-MSVC itoa () - Funktion ist. Heres der Link. Optimale Base-10 nur itoa () Funktion Leistung ist mindestens 10X die von sprintf (). Die Benchmark ist auch die Funktionen QA Test, wie folgt. Es gibt einige dumme Vorschläge über die Verwendung der Anrufer-Speicher, die das Ergebnis schweben irgendwo in einem Puffer in der Anrufer Adresse Raum gemacht. Ignoriere sie. Der Code, den ich aufgeführt habe, funktioniert einwandfrei, wie der BenchmarkQA-Code zeigt. Ich glaube, dieser Code ist mager genug, um in einer eingebetteten Umgebung zu verwenden. YMMV, natürlich. Antwortete Jul 1 14 um 7:54 2017 Stack Exchange, IncConvert Integer to String (Nicht-Standard-Funktion) Konvertiert einen Integer-Wert in eine null-terminierte Zeichenfolge mit der angegebenen Basis und speichert das Ergebnis in dem Array, das durch den Str-Parameter angegeben wird. Wenn die Basis 10 ist und der Wert negativ ist, wird dem resultierenden String ein Minuszeichen (-) vorangestellt. Mit jeder anderen Basis. Wert gilt immer als unsigned. Str sollte ein Array sein, das lang genug ist, um jeden möglichen Wert zu enthalten: (sizeof (int) 81) für radix2. D. h. 17 Bytes in 16-Bit-Plattformen und 33 in 32-Bit-Plattformen. Parameterwert Wert, der in einen String konvertiert werden soll. Str Array im Speicher, wo die resultierende null-terminierte Zeichenfolge gespeichert werden soll. Base Numerische Basis, die verwendet wird, um den Wert als String zwischen 2 und 36 darzustellen. Wo 10 bedeutet Dezimalbasis, 16 hexadezimal, 8 oktal und 2 binär. Rückgabewert Ein Zeiger auf die resultierende nullterminierte Zeichenfolge, wie der Parameter str. Portabilität Diese Funktion ist in ANSI-C nicht definiert und ist nicht Teil von C, sondern wird von einigen Compilern unterstützt. Eine standardkonforme Alternative für einige Fälle kann Sprintf sein: sprintf (str, d, value) konvertiert in Dezimalbasis. Sprintf (str, x, value) konvertiert in hexadezimale Basis. Sprintf (str, o, value) wandelt in oktale Basis um. Sprintf Schreiben von formatierten Daten in String (Funktion) atoi Konvertieren von String in Ganzzahl (Funktion) atol Konvertieren von String in lange Integer (Funktion)

No comments:

Post a Comment