Toon posts:

[VC++] int to Cstring

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heb een probleem om een int naar CString om te zetten.
Dit is mijn routine:
C++:
1
2
3
4
5
6
7
8
CString convertToCString(int ntValue)
{
char szTemp[20];
memset(szTemp, 0, 20); 
CString tempstring;
_itoa(ntValue,szTemp,20);
return CString(szTemp); 
}


deze routine compileert, maar bij een test om 123 om te zetten krijg ik 58 op het scherm.
Testroutine:
C++:
1
2
int aa=123;
AfxMessageBox(convertToCString(aa));


double naar CString lukt wel met:
C++:
1
2
3
4
5
6
7
CString convertToCString(const double dblValue)
{
char szTemp[MAX_PATH]; 
memset(szTemp, 0, MAX_PATH); 
sprintf(szTemp, "%f", dblValue); 
return CString(szTemp); 
}


Wat loop hier verkeerd?

  • Markieman
  • Registratie: December 2001
  • Laatst online: 15-08 13:58
Zou dit werken bij convert int to cstring?:

sprintf(szTemp, "%d", ntValue);

en waarom MAX_PATH?? Het zijn toch geen path strings?

You do not fear them? - The Wraith? Naah. Now *clowns*, that's another story.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Lees de documentatie van _itoa nog eens heel goed na :Z

edit:
nog even terug open... het is dan wel een enorm gevalletje 'read the manual' maar toch had ik 63 verwacht als output van je programma ipv 58...?

[ Voor 59% gewijzigd door curry684 op 21-11-2003 10:25 ]

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 21 november 2003 @ 10:19:
Lees de documentatie van _itoa nog eens heel goed na :Z
Ok, mss iets te vlug gelezen, snapte 'radix' niet. ff opgezocht. Nu wel. |:(

... Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/Closed_on.gif

[ Voor 19% gewijzigd door Verwijderd op 21-11-2003 11:12 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Maar zoals gezegd, bij een radix van 20 zou het correcte resultaat van decimaal 123 gelijk zijn aan 63 (6*20 + 3). Ik vraag me dus nog steeds af hoe je aan 58 kwam :)

Professionele website nodig?


  • The End
  • Registratie: Maart 2000
  • Laatst online: 13:56

The End

!Beginning

Je kan heel makkelijk een int in een CString zetten:

code:
1
2
3
int        MijnInt = 0;
CString Temp;
Temp.Format(_T("%ld"),MijnInt);


Edit:
(Format kan op dezelfde manier als b.v. sprintf converteren)

[ Voor 23% gewijzigd door The End op 21-11-2003 13:27 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Uhm The End: de originele oplossing van TS is al buffer-unsafe, dat wil jij nu dus vervangen door type-unsafe.... :z

In [rml][ C] Decimaal naar binair (gcc Linux)[/rml] kun je 2 platformindependent typesafe implementaties vinden trouwens voor itoa, en die kun je makkelijk buffer-safe maken als je wilt (_itoa is VC-only).

Professionele website nodig?


  • The End
  • Registratie: Maart 2000
  • Laatst online: 13:56

The End

!Beginning

curry684 schreef op 21 november 2003 @ 13:51:
Uhm The End: de originele oplossing van TS is al buffer-unsafe, dat wil jij nu dus vervangen door type-unsafe.... :z

In [rml][ C] Decimaal naar binair (gcc Linux)[/rml] kun je 2 platformindependent typesafe implementaties vinden trouwens voor itoa, en die kun je makkelijk buffer-safe maken als je wilt (_itoa is VC-only).
Ik zie niet echt waarom de oplossing zo ingewikkeld moet zijn als het ook in een regeltje kan? Mijn oplossing werkt prima en geschikt voor VC++ (CString is dacht ik ook VC++ only)
Als je mij een voorbeeld kan geven wanneer mijn oplosing problemen zou gaan opleveren... (Wat bedoel je trouwens met type unsafe?)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik denk dat je als je even wat research doet om je eigen slotvraag te beantwoorden de rest van je vraag wel kunt beantwoorden ;)

Professionele website nodig?


  • The End
  • Registratie: Maart 2000
  • Laatst online: 13:56

The End

!Beginning

curry684 schreef op 21 november 2003 @ 14:06:
Ik denk dat je als je even wat research doet om je eigen slotvraag te beantwoorden de rest van je vraag wel kunt beantwoorden ;)
Ja, zo kan je er wel lekker simpel vanaf komen...
Ik denk dat jij met type safe bedoelt dat je een verkeerd type kan proberen te converteren. Dan heb ik de volgende code voor je :):

code:
1
2
3
4
5
6
CString ConvertIntToString(int Value)
{
     CString Temp;
     Temp.Format(_T("%ld"),Value);
     return Temp;
}


Zo goed?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Nee varargs zijn en blijven vies in C++, omdat ze per definitie niet type-safe zijn :)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

boost heeft overigens een type-safe format functie a la printf ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1