Jak przekonwertować CString
na double
w C++?Jak przekonwertować CString na podwójne w C++?
Obsługa standardu Unicode również byłaby miła.
Dzięki!
Jak przekonwertować CString
na double
w C++?Jak przekonwertować CString na podwójne w C++?
Obsługa standardu Unicode również byłaby miła.
Dzięki!
CString
można przekształcić do LPCTSTR
, który jest w zasadzie const char*
(const wchar_t*
Unicode budowania).
Wiedząc o tym, można użyć atof()
:
CString thestring("13.37");
double d = atof(thestring).
... lub buduje Unicode, _wtof()
:
CString thestring(L"13.37");
double d = _wtof(thestring).
... albo do wspierania zarówno Unicode i non-Unicode buduje. ..
CString thestring(_T("13.37"));
double d = _tstof(thestring).
(_tstof()
to makro, które rozwija się do atof()
lub _wtof()
na podstawie tego, czy _UNICODE
jest zdefiniowana)
Ten link pokazuje "wcstod", czyli to, co użyłem do obsługi Unicode. http://msdn.microsoft.com/en-us/library/kxsfc1ab(VS.80).aspx –
To działa, ale sugestia IMO MighMoS o std :: stringstream jest nieco czystsza. – Pete
_wcstod_l/_tcstod_l pozwala określić ustawienia narodowe, więc można obsługiwać format lokalny (separator dziesiętny jako przecinek lub kropka itp.). –
z biblioteki boost lexical_cast, robisz
#include <boost/lexical_cast.hpp>
using namespace boost;
...
double d = lexical_cast<double>(thestring);
Można konwertować nic do niczego użyciu std::stringstream
. Jedynym wymaganiem jest implementacja operatorów. Łańcuchy strumieniowe można znaleźć w pliku nagłówkowym <sstream>
.
std::stringstream converter;
converter << myString;
converter >> myDouble;
To brzmiało dobrze dla mnie. Niestety nie zadziałało to w przypadku kwestionowanego scenariusza z typem CString firmy Microsoft (MFC). Mam to skompilowane, ale przekonwertowana podwójna liczba wydawała się być losowa, przynajmniej nie miała związku z ciągiem. Mam nadzieję, że działa dobrze dla innych typów, które lepiej implementują operatorów. Nie jestem ekspertem w używaniu łańcuchów std w C++, ale dla mnie konwerter, który powoduje błędne liczby bez zgłaszania błędu lub wyjątku, jest bardzo niebezpieczny. – Philm
Uwaga: Inna propozycja tutaj, _tstof() działała dobrze, aby przekonwertować CString do podwójnego dla mnie. – Philm
@Philm: Ta odpowiedź ** może ** być używana z obiektami "CString" MFC. Nie potrzebujesz też operatora '(<<). Do tego służy konstruktor: 'std :: wstringstream converter (myString);'. Zauważ, że wymaga to 'CStringW' (która w większości przypadków jest poprawnym typem). Jednak wciąż jest tam cichy zabójca. Wydaje się jasne, eleganckie. I źle. Używa bieżącego ustawienia narodowego wątku dla konwersji. To może, ale nie musi być to, co chcesz. Lepiej użyć rozwiązania, które pozwala jednoznacznie określić ustawienia narodowe używane do konwersji. – IInspectable
Naprawdę nie mogę uwierzyć, że to nie zostało jeszcze zadane ... ale poszukiwania niczego nie ujawniły. Jeśli jest to duplikat, proszę bądź łagodny :) –
Nie można znaleźć tu odpowiedzi, ale użycie google "cstring to double" daje ci poprawną odpowiedź przy pierwszym trafieniu. –
@AndrewBainbridge istotnie tak jest, jeśli przez "poprawną odpowiedź" masz na myśli tę stronę tutaj :) – aquirdturtle