Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1584 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Conversion de CString en double

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Conversion de CString en double

n°813203
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 10:07:16  profilanswer
 

Voilà après un long moment de recherche sur le forum et via le net, je n'arrive pas à trouver une méthode qui pourrait me convertir un CString en double. Je suis en train de programmer un petit soft de calcul de propriétés de divers type de solution, donc j'ai agencé ça avec avec une fenêtre avec pleins d'edit box..
Mon problème, c'est que je dois récupérer des variables de types double or avec GetDlgItem(Text ou Int) ben je ne récupère pas le bon format.  
J'ai lu plusieurs topic sur la conversion vers des int mais chez moi, aucune ne marche.
En gros ce que je veux faire c'est OnKillFocusMonEditBox, récupérer la valeur de la edit box, sachant que j'y ai associé une variable de type double. Ça pourrait en quelque sorte éviter que je passe par le GetDlgItemTruc. Pui je voulais tenter un DDX_Text mais je sais pas comment faire juste pour une variable...
Bon voilà, je suis un peu (beaucoup) newb en programation alors j'en fais appel à vous :)
 
MERCI :jap:


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
mood
Publicité
Posté le 03-08-2004 à 10:07:16  profilanswer
 

n°813209
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 10:16:23  profilanswer
 

Code :
  1. CString str = "123.456";
  2. double d = atof(str);


---------------
J'ai un string dans l'array (Paris Hilton)
n°813230
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 10:38:18  profilanswer
 

J'ai vu ça sur les autres topic mais :) ça marche pas..  
Je peux pas parce que je veux récupérer une variable :)
 
En gros je fais :

Code :
  1. CString mavariable;
  2. GetDlgItemText(IDCmaEditBox,mavariable);
  3. double maautrevariable = atof(mavariable);


et ça marche pas...
et il me renvoie ça:

Code :
  1. 'atof' : cannot convert parameter 1 from 'class CString' to 'const char *'


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813238
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 10:42:14  profilanswer
 

ah merde, j'ai oublié le cast !
essaie ça :

Code :
  1. double maautrevariable = atof(static_cast<LPCSTR>(mavariable));


---------------
J'ai un string dans l'array (Paris Hilton)
n°813245
Taz
bisounours-codeur
Posté le 03-08-2004 à 10:46:03  profilanswer
 

rattrape toi aux branches, je t'y prends à souiller mon static_cast avec ces windowseries [:taz]. il merdoie le forum, c'est gonflant

n°813251
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 10:49:33  profilanswer
 

J'allais grimpé au rideaux..... mais il me renvoie ça :
 

Code :
  1. 'static_cast' : cannot convert from 'class CString' to 'const char *'


 
Merci Harkonnen pour l'aide :)


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813256
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 10:51:30  profilanswer
 

Taz a écrit :

rattrape toi aux branches, je t'y prends à souiller mon static_cast avec ces windowseries [:taz]. il merdoie le forum, c'est gonflant


tu peux pas imaginer comme la classe CString des MFC est mal fichue, t'es obligé d'utiliser ce genre de ficelle pour t'en sortir :'(


---------------
J'ai un string dans l'array (Paris Hilton)
n°813260
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 10:52:49  profilanswer
 

Cpu Toaster a écrit :

J'allais grimpé au rideaux..... mais il me renvoie ça :
 

Code :
  1. 'static_cast' : cannot convert from 'class CString' to 'const char *'


 
Merci Harkonnen pour l'aide :)


t'utilises quelle version des MFC ? la 4.2 ou la 7 ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°813267
masklinn
í dag viðrar vel til loftárása
Posté le 03-08-2004 à 10:54:16  profilanswer
 

et pourquoi pas utiliser  

Code :
  1. CString chainalacon = "1234"
  2. double nombralacon = atof(chainalacon.c_str())


?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°813280
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:00:44  profilanswer
 

Merci :) mais :( ça marche pas parce que C_str n'est pas membre de CString... d'après lui..
 
Harkonnen désolé, je vois pas où c'est la version du MFC :(
C'est visual 6.0 que messieurs du labo m'ont installé


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
mood
Publicité
Posté le 03-08-2004 à 11:00:44  profilanswer
 

n°813301
masklinn
í dag viðrar vel til loftárása
Posté le 03-08-2004 à 11:08:35  profilanswer
 

tiens? me semblait qu'il existait aussi dans les CString... (vive les strings de la STL)
 
bon ben la MSDN dit:

Citation :

Converting to C-Style Null-Terminated Strings
 
Consider the following two cases:
 
    * In the simplest case, you can cast a CString object to be an LPCTSTR. The LPCTSTR type conversion operator returns a pointer to a read-only C-style null-terminated string from a CString object.
 
      The pointer returned by LPCTSTR points into the data area used by the CString. If the CString goes out of scope and is automatically deleted or something else changes the contents of the CString, the LPCTSTR pointer will no longer be valid. Treat the string to which the pointer points as temporary.
    * You can use CString functions, such as SetAt, to modify individual characters in the string object. However, if you need a copy of a CString object's characters that you can modify directly, use strcpy (or the Unicode/MBCS-portable _tcscpy) to copy the CString object into a separate buffer where the characters can be safely modified, as shown by the following example:
 
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
//... modify lpsz as much as you want
 
          Note   The second argument to strcpy (or the Unicode/MBCS-portable _tcscpy) is either a const wchar_t* (Unicode) or a const char* (ANSI). The example above passes a CString for this argument. The C++ compiler automatically applies the conversion function defined for the CString class that converts a CString to an LPCTSTR. The ability to define casting operations from one type to another is one of the most useful features of C++.


Message édité par masklinn le 03-08-2004 à 11:09:33

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°813320
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:15:46  profilanswer
 

Euh je comprends pas tout met, en gros en faisant :

Code :
  1. char unevariable[x]
  2. strcpy(unevariable,LPTSTR monCString)


 
Bon désolé j'écris n'importe quoi peut-être mais là, je suis un peu dépassé par les évènements...


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813333
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 11:22:33  profilanswer
 

Cpu Toaster a écrit :

Euh je comprends pas tout met, en gros en faisant :

Code :
  1. char unevariable[x]
  2. strcpy(unevariable,LPTSTR monCString)


 
Bon désolé j'écris n'importe quoi peut-être mais là, je suis un peu dépassé par les évènements...


non, essaie plutot ça :

Code :
  1. double maautrevariable = atof(static_cast<LPCTSTR>(*mavariable));


Message édité par Harkonnen le 03-08-2004 à 11:22:51

---------------
J'ai un string dans l'array (Paris Hilton)
n°813344
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:25:41  profilanswer
 

:(

Code :
  1. edit:
  2. 'static_cast' : cannot convert from 'const unsigned short' to 'const unsigned short *'


Bon, je vous prends la tête, je vais essayer de contourner via des boutons pour forcer le dodataexchange ce que je ne connais pas non plus .. :D Bon, c'est parti :)


Message édité par Cpu Toaster le 03-08-2004 à 11:27:17

---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813346
Taz
bisounours-codeur
Posté le 03-08-2004 à 11:27:13  profilanswer
 

unsigned short ?

n°813349
blackgodde​ss
vive le troll !
Posté le 03-08-2004 à 11:28:15  profilanswer
 

const unsigned short ?? CString en unicode ? il te faudrait une conversion unicode => ascii dans ce cas
et sinon, il me semble (je connais pas les MFC) qu'il ne faut pas mettre '*' ds l'exemple d'Harkonnen
 

Code :
  1. double maautrevariable = atof(static_cast<LPCTSTR>(mavariable));


---------------
-( BlackGoddess )-
n°813359
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:31:48  profilanswer
 

Bon mon code :

Code :
  1. double p;
  2.         CString Temp_p;
  3. GetDlgItemText(IDC_EDIT_H2O_p,Temp_p);
  4. p= atof(static_cast<LPCTSTR>(Temp_p));


et ça me renvoie:

Code :
  1. 'atof' : cannot convert parameter 1 from 'const unsigned short *' to 'const char *'


Faut des librairies spéciales pour faire tout ça? (on sait jamais...)


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813364
blackgodde​ss
vive le troll !
Posté le 03-08-2004 à 11:35:05  profilanswer
 

voila peut-etre un début de solution en utilisant la STL :
 

Code :
  1. #include <windows.h>
  2. #include <sstream>
  3. std::basic_istringstream<TCHAR> iss(static_cast<const TCHAR*>(tachaine));
  4. double d;
  5. if(iss >> d)
  6. {
  7.  // succes
  8. }
  9. else
  10. {
  11.  //erreur
  12. }


 
edit : +const


Message édité par blackgoddess le 03-08-2004 à 11:44:46

---------------
-( BlackGoddess )-
n°813378
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:39:16  profilanswer
 

Code :
  1. 'static_cast' : cannot convert from 'class CString' to 'unsigned short *'


quand je mets Temp_p à la place de tachaine.


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813385
blackgodde​ss
vive le troll !
Posté le 03-08-2004 à 11:41:56  profilanswer
 

static_cast<const TCHAR*> pardon


---------------
-( BlackGoddess )-
n°813395
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:45:19  profilanswer
 

ÇA COMPILE!!!! maintenant, faut que je comprenne la chose, pourquoi tu as mis

Code :
  1. if(condition)
  2. //succes  
  3. else
  4. //erreur


?
S'il y a succès normalement, ma variable p devrait prendre la valeur du CString c'est ça?
 
Merci à tous :jap:
je continue :)


Message édité par Cpu Toaster le 03-08-2004 à 11:46:01

---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813399
Taz
bisounours-codeur
Posté le 03-08-2004 à 11:47:12  profilanswer
 

non c'est l'inverse

n°813401
blackgodde​ss
vive le troll !
Posté le 03-08-2004 à 11:47:49  profilanswer
 

oui, mais s'il y a erreur, la variable est indéfinie ... donc ca peut etre une valeur valide ...
 
std::basic_istringstream<...>::operator >> retourne vrai si la conversion a réussi, faux sinon.
 
s'il y a succès, oui la variable prends la valeur du CString


---------------
-( BlackGoddess )-
n°813402
Taz
bisounours-codeur
Posté le 03-08-2004 à 11:48:36  profilanswer
 

pas retourne, 'est évalué à'

n°813408
blackgodde​ss
vive le troll !
Posté le 03-08-2004 à 11:50:52  profilanswer
 

oui, ca appelle l'operateur bool sur la référence std::basic_istringstream qui est 'la valeur' de retour de l'operateur ?


---------------
-( BlackGoddess )-
n°813419
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 11:58:46  profilanswer
 

oki donc normalement je tape la suite du code dans succes alors et je laisse comme ça...
Je viens de me rendre compte que quand j'appuie sur mes boutons il se passe rien... pfff ça me soule, c'est la fin de la journée. Je m'en vais du bureau :(
Merci à tous :)


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813428
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-08-2004 à 12:03:08  profilanswer
 

T'es en Asie ? :)

n°813442
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 12:09:58  profilanswer
 

vi suis à Hong Kong :)
Rhooo, mon Onkillfocus, je met un AfxMessageBox derrière et il y a rien qui s'affiche :(


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813470
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-08-2004 à 12:20:58  profilanswer
 

Je me disais bien parcequ'en France c'est (malheureusement :ange:) pas trop l'heure de partir... :ange:
 
Par contre désolé j'y connais rien niveau MFC... :/

n°813503
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 12:34:49  profilanswer
 

et si t'essayais autre chose que atof ?
exemple :

Code :
  1. CString str = _T("1234.56787" );
  2. double x;
  3. _stscanf(str, _T("%lf" ), &x);


en plus, t'es blindé au niveau Unicode avec cette manip


---------------
J'ai un string dans l'array (Paris Hilton)
n°813521
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 12:47:59  profilanswer
 

Bé non j'ai pas essayé, mais comme il compile je me prend plus la tête avec, je voulais vérifier si ça marchait en me balançant la valeur que je saisissai dans l'edit box, mais rien ne marche, je m'explique, j'ai ma dialog box, j'appuie sur tous les boutons et ou edit box que j'ai, il se passe rien :( alors que j'ai des onOK ou des trucs comme ça programmés et bien linker.. :(  
Bon je vais faire des heures sup à la maison moi...


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813524
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 12:49:54  profilanswer
 

ben dans le OnOK(), balance un AfxMessageBox(), pour voir si c'est la pompe à messages ou ta fonction qui déconne [:sinclaire]


Message édité par Harkonnen le 03-08-2004 à 12:50:18

---------------
J'ai un string dans l'array (Paris Hilton)
n°813529
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 12:52:54  profilanswer
 

Ben justement, il y a rien qui se passe, :(  
Pourtant j'ai bien créé tous mes trucs, j'ai même créé mon programme par dessus un sample du msdn... :(  
Grrr je vais metelefaire!


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
n°813533
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-08-2004 à 12:55:55  profilanswer
 

est ce que ta fenêtre principale est bien rattachée à une classe :??:


---------------
J'ai un string dans l'array (Paris Hilton)
n°813542
Cpu Toaste​r
R pixel overclocking!
Posté le 03-08-2004 à 13:04:45  profilanswer
 

Ben oui, en gros ce que j'ai fait c'est que j'ai programmer par dessus le CmnCtrl2 des samples du msdn, en gros c'est une fenêtre d'application qui affiche une boîte de dialog avec plein de tab control. La fenêtre principal est lié a une CpropertySheet, et les tab affichent des "dialog" qui sont elles mêmes liées à des CPropertyPage.
Quand j'ai commencé à programmer, j'ai trouver où le programme indiquait quelles tab afficher et j'ai mis en comments les quelques lignes qu'il fallait dans le PropertySheet. Ensuite j'ai crée mes autres PropertyPage avec les dialog qui faut.  
Là je lance le programe, ben il m'affiche bien la boîte avec les tab et tous, je peux aller partout, par contre quand j'appuie sur les boutons avec du code derrière, même un bête AfxMessageBox(CString("truc" )); derrière... ça marche pas..
 
Par contre, je viens à me poser une question vu que sans le CString de mon Afxmessagebox, ça plante. Quand je compile, j'ai ce message:

Code :
  1. LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF

ça pourrait expliquer mes multiples erreurs précédentes?


---------------
Photo Toaster - Flickr Toaster - Blog Toaster
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Conversion de CString en double

 

Sujets relatifs
transformer DWORD en CStringconversion en bits
conversion ebcdic en asciiconversion des décimaux en bits
[delphi 7] conversion de word en stringdouble jointure "sur un même champ"
[java] une lib de conversion texte vers html ?Conversion de date : chiffre => lettre
Conversion RichText -> UTF-8 (suppression accentuation)[Java] Question bête sur le double héritage
Plus de sujets relatifs à : [C++] Conversion de CString en double


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR