float - std :: Zeichenfolgenkonvertierung Alternative?

8

Gibt es eine Alternative zu atof , strtod , lexical_cast , stringstream oder sprintf ?

das ist:

  1. schnell
  2. C ++ Weg ( std::string anstelle von char* )
  3. safe (kein Pufferüberlaufrisiko)
  4. gültig (gib NaNN zurück, wenn die Konvertierung nicht möglich war)
  5. keine externe Bibliothek (unabhängig)

Ich bevorzuge eher dies , eine einfache Funktion, optimiert und auf den Punkt

Grund:

  • atof und strtod ist C Funktion und sie geben nicht NaN bei Fehler zurück, ich arbeite lieber an std::string , also frage ich nur ob jemand bereits einen Wrapper in std::string schreibt, den ich benutzen kann (wenn du nichts dagegen).
  • lexical_cast hat eine Boost-Abhängigkeit
  • stringstream ist langsam
  • sprintf hat ein Pufferüberlaufrisiko und seine C-Funktion
uray 25.09.2011, 21:00
quelle

3 Antworten

1

Ich würde Boost Spirit betrachten

Immerhin erweisen sich die Benchmarks der Formatierer (also Float - & gt; string) durchweg als Top-of-the-Bill * 1 *

Auch die genaue Eingabeformatspezifikation und Semantik beim Parsen kann sehr gut mit einer Richtlinienklasse konfiguriert werden.

Hier ist meine absolute min-abhängige Verwendung von qi :: any_real_parser & lt; & gt; und die Liste der Abhängigkeiten, die es berührt:

%Vor%

  
  • boost / Konzept
  •   
  • boost / config
  •   
  • boost / detail
  •   
  • Boost / Ausnahme
  •   
  • Boost / Fusion
  •   
  • boost / iterator
  •   
  • boost / math
  •   
  • boost / mpl
  •   
  • boost / optional
  •   
  • Boost / Präprozessor
  •   
  • boost / proto
  •   
  • Verstärkung / Reichweite
  •   
  • boost / regex
  •   
  • boost / Geist
  •   
  • boost / typeof
  •   
  • boost / type_traits
  •   
  • boost / Dienstprogramm
  •   
  • Boost / Variante
  •   

aligned_storage.hpp, assert.hpp, blank_fwd.hpp, blank.hpp, call_traits.hpp, checked_delete.hpp, concept_check.hpp, config.hpp, cstdint.hpp, current_function.hpp, foreach_fwd.hpp, foreach.hpp , get_pointer.hpp, implicit_cast.hpp, iterator.hpp, limits.hpp, math_fwd.hpp, next_prior.hpp, nichtkopierbares.hpp, none.hpp, none_t.hpp, optionales.hpp, ref.hpp, static_assert.hpp, swap .hpp, throw_exception.hpp, type.hpp, Dienstprogramm.hpp, variant.hpp, version.hpp

1 z.B. Ссылка

    
sehe 25.09.2011, 21:05
quelle
1

Wenn Sie von numerischen Typen in std :: string konvertieren möchten, steht im neuesten Standard eine Funktion std::to_string zur Verfügung.

Leider, wie ich kürzlich herausgefunden habe, ist es in Visual Studio 2010 etwas eingeschränkt, weil es nur drei Überladungen gibt; lang doppelt, lang lang und unsigniert lang lang. Dies führt zu Problemen, wenn Sie versuchen, sie in Vorlagen zu verwenden.

    
Daemin 30.09.2011 04:01
quelle
0

Die schnelle Format -Bibliothek sollte in der Lage sein, die Art von Transformationen zu machen, nach der Sie suchen, zumindest für das Schreiben eines Floats . Es behandelt jedoch nicht das Parsen eines Floats.

    
Billy ONeal 25.09.2011 21:19
quelle

Tags und Links