2011-06-19 18 views
7

Jak mogę przekonwertować double na const char, a następnie przekonwertować z powrotem na double?Double to Const Char *

Chcę przekonwertować podwójne do ciąg, aby zapisać go do pliku za pośrednictwem fputs, a następnie po przeczytaniu pliku, będzie musiał zostać przekonwertowany z powrotem na podwójne.

Używam Visual Express Edycja C++ 2010.

+0

Jeśli używasz C++, czy naprawdę chcesz używać char i fputs? –

+1

Lepiej używać plików binarnych zamiast plików tekstowych i przechowywać podwójne "tak jak jest". Następnie przeczytaj "tak jak jest". Upewnij się, że "struktura" pliku nie zmienia się. – Ajay

+0

Chciałbym wesprzeć to, co powiedział Ajay: bardziej efektywne jest używanie plików binarnych i przechowywanie debelów jako debelów zamiast przekształcania ich w dziesiętne przedstawienie (choćby dlatego, że może to spowodować błędy zaokrąglania!), Tylko być w stanie zapisać go do pliku tekstowego w postaci ciągu. – leftaroundabout

Odpowiedz

6

Jeśli chcesz po prostu napisać wartości double złożyć, można po prostu napisać, bez przekształcaniu ich const char* . Konwertowanie ich na const char* jest przesadą.

Wystarczy użyć std::ofstream jak:

std::ofstream file("output.txt")' 

double d = 1.989089; 

file << d ; // d goes to the file! 

file.close(); //done! 
+3

Dzięki! Właściwie to nie wiedziałem, że to możliwe, LOL. Pracuję tylko z C++ przez kilka dni. –

8

Ponieważ dodany C++ tagów, ja proponuję użyć std::stringstream:

#include <sstream> 

stringstream ss; 
ss << myDouble; 
const char* str = ss.str().c_str(); 
ss >> myOtherDouble; 
+1

Należy dodać, że po wywołaniu funkcji składającej się z nieokreślonego elementu, wskaźnik nie powinien być traktowany jako poprawny. – lccarrasco

3

Można użyć tych funkcji do konwersji do iz:

template <class T> 
bool convertFromStr(string &str, T *var) { 
    istringstream ss(str); 
    return (ss >> *var); 
} 

template <class T> 
string convertToStr(T *var) { 
    ostringstream ss; 
    ss << *var; 
    return ss.str(); 
} 

Przykład:

double d = 1.234567; 
string str = convertToStr<double>(&d); 
cout << str << endl; 
double d2; 
convertFromStr<double>(str, &d2); 
cout << d2 << endl; 
1

Użyj tego funcition:

const char* ConvertDoubleToString(double value){ 
    std::stringstream ss ; 
    ss << value; 
    const char* str = ss.str().c_str(); 
    return str; 
} 
Powiązane problemy