Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[VC++] Konwersja Integer to String

mirekk36 04 Maj 2010 22:35 7661 12
  • #1 04 Maj 2010 22:35
    mirekk36
    Poziom 42  

    Witam,

    Dla mnie to masakra ale dla znawców C++ to pikuś zapewne.

    Chodzi o to, że zaczynam raczkować w Visual C++

    Tworzę pierwszą aplikację okienkową i potrzebuję durnej konwersji jakiegoś typu integer na zwykły string.

    Nie dość że nie mogłem sobie poradzić z tym żeby zdeklarować string w aplikacji okienkowej

    String ^ nazwa;

    (nie wiem po co ten ptaszek ale zadziałało i mam już zmienną stringową )

    To teraz mam zmienną typu

    LONG LICZBA;

    No i chcę kurna chata tą zmienną albo wrzucić do tej zmiennej nazwa albo wyświetlić ją jako tekst w jakiejś kontrolce ale kicha zimna

    No kurczę jak szukam po necie - googlu itp czegoś typu Integer to string to znajduję jak to zwykle do C czy C++ miliony podpowiedzi ale nie takich jakie bym potrzebował

    Wszędzie znajduję np - std::cout << LICZBA;

    no ale to nie żadna aplikacja konsolowa. Kurczę jak tu się poruszać w tym C++ w środowisku Visual C++ i szukać takich informacji

    Gdy programowałem w Delphi to zaraz znalazła się funkcja

    IntToStr(LICZBA);

    a tu???? jak dla mnie na razie masakra na maxa :(

    0 12
  • #2 04 Maj 2010 22:51
    inot
    Poziom 20  

    Tutaj kilka przykładów.

    _itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow
    Convert an integer to a string.

    char *_itoa( int value, char *string, int radix );

    char *_i64toa( __int64 value, char *string, int radix );

    char * _ui64toa( unsigned _int64 value, char *string, int radix );

    wchar_t * _itow( int value, wchar_t *string, int radix );

    wchar_t * _i64tow( __int64 value, wchar_t *string, int radix );

    wchar_t * _ui64tow( unsigned __int64 value, wchar_t *string, int radix );

    0
  • #3 04 Maj 2010 23:11
    mirekk36
    Poziom 42  

    Ok zrobiłem tak:

    Code:
    char ala[100];
    

    _itoa(COMPORT, ala, 10);


    (pomijam już że tu kompilator burzy się, że:

    Form1.h(164) : warning C4996: '_itoa': This function or variable may be unsafe. Consider using _itoa_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details

    )


    pal pies to tylko warning a mi zależy żeby wkońcu kurrr...... (sorki)

    zrobić np to:

    Code:
    richTextBox1->AppendText(ala);


    a tu mam już błąd typu:

    Form1.h(171) : error C2664: 'System::Windows::Forms::TextBoxBase::AppendText' : cannot convert parameter 1 from 'char [100]' to 'System::String ^'

    Czy zamiana liczby na ciąg znaków w C++ to jakaś kosmiczna masakra? żeby wstawić ten string do jakiejś kontrolki windowsowej tekstowej ???

    Dodano po 8 [minuty]:

    kurna, znalazłem chyba:

    nazwa = Convert::ToString(COMPORT);

    0
  • Pomocny post
    #4 05 Maj 2010 00:11
    utak3r
    Poziom 25  

    inot napisał:
    _itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow


    Zapomnij o tych funkcjach, są przeznaczone dla C, nie dla C++. Są zwyczajnie niebezpieczne - jak to połowa funkcji w C...

    Mirek, skoro to C++, proponuję zdefiniować sobie taki oto szablonik:

    Code:

    template <class T> std::string ToString(const T& t)
    {
        std::ostringstream oss;
        oss << t;
        return oss.str();
    }


    i używasz tego np. tak:

    Code:

    long liczba = 15;
    std::string mojtekst = ToString<long>(liczba);


    No i ogólnie - stringi w C++ to std::string :)

    0
  • #5 05 Maj 2010 00:30
    mirekk36
    Poziom 42  

    utak3r --> no gdzieś na necie też znalazłem coś z tym ostringstream ale nie miałem pojęcia jak to na szybko użyć czy wykorzystać.

    Szablony o których wspominasz - z teorii też znam i wiem z czym się to je, ale jak to wpleść do projektu to już dla mnie jak na razie zagwozdka. Jednak bardzo dla mnie przydatna informacja - bo to pierwszy taki jakby przydatny i uniwersalny szablonik dla moich celów ;)

    0
  • #6 05 Maj 2010 00:44
    utak3r
    Poziom 25  

    Na pierwszy raz taki szablonik jest w sam raz do "obczajenia" o co z nimi chodzi :) A chodzi głównie o to, że na poziomie pisania kodu nie definiujesz, jaki będzie typ parametru funkcji. Tego tutaj, co podałem, możesz użyć do konwersji inta, longa, double i co tam chcesz :)

    0
  • #7 05 Maj 2010 00:48
    mirekk36
    Poziom 42  

    utak3r --> tak , tak - wiem właśnie do czego są szablony - tylko jeszcze staram się na szybko okiełznać całą strukturę plików i co gdzie jest w kodzie jeśli chodzi o te aplikacje okienkowe. Jeszcze się w tym mocno gubię jeśli chodzi o C++ oczywiście. (Z konsolowymi już jakoś idzie)

    0
  • #8 05 Maj 2010 21:00
    Dr.Vee
    VIP Zasłużony dla elektroda

    Możesz nawet polegać na kompilatorze do wybrania odpowiedniej specjalizacji wzorca i zaoszczędzić sobie pisania i kłopotów po zmianie typów zmiennych:

    Code:
    int i = -123;
    
    std::string s = ToString(i);

    Pozdrawiam,
    Dr.Vee

    0
  • #9 05 Maj 2010 21:48
    mirekk36
    Poziom 42  

    Dr.Vee --> mam w pliku Form1.h

    Code:
       using namespace System;
    
       using namespace System::ComponentModel;
       using namespace System::Collections;
       using namespace System::Windows::Forms;
       using namespace System::Data;
       using namespace System::Drawing;


    i nie mogę tego użyć tak jak napisałeś :

    Cytat:
    nazwa = std::ToString(i);


    Mogę tylko tak to zrobić:


    Code:
    nazwa = System::Convert::ToString(COMPORT);


    Jeszcze nie łapię do końca kiedy mogę używać std::

    dlaczego w ogóle cały kod obsługi zdarzeń klawiszy itp pisany jest w pliku Form1.h

    a nie jakimś *.cpp ???

    na razie wszystko mnie zadziwia

    0
  • #10 05 Maj 2010 21:54
    inot
    Poziom 20  

    Jakiej aplikacji używasz ? Cały czas piszesz "Form1.h" i nie wiem gdzie się znajdujesz. Możesz zrobić "Screenshot" ?

    0
  • #11 05 Maj 2010 22:06
    Dr.Vee
    VIP Zasłużony dla elektroda

    Mirekk36 - mój kod odnosił się do wywołania funkcji podanej przez utak3r - poza tym po co dodajesz std:: przed nazwą? std:: to kwalifikacja przestrzeni nazw dla klas z biblioteki standardowej c++.

    Jeśli raczkujesz z C++ to sugeruję naukę od podstaw, bo zrozumienie tego co się dzieje w obsłudze GUI sterowanej VC++ builderem może być ponad Twoje możliwości - automatyczne narzędzia najlepiej działają w rękach tych, którzy rozumieją, co się dzieje "pod maską".

    Pozdrawiam,
    Dr.Vee

    0
  • #12 05 Maj 2010 22:19
    mirekk36
    Poziom 42  

    Dr.Vee napisał:

    Jeśli raczkujesz z C++ to sugeruję naukę od podstaw, bo zrozumienie tego co się dzieje w obsłudze GUI sterowanej VC++ builderem może być ponad Twoje możliwości - automatyczne narzędzia najlepiej działają w rękach tych, którzy rozumieją, co się dzieje "pod maską".


    No spokojnie - ale od czegoś trzeba chyba zacząć prawda? jeśli chodzi o tworzenie GUI.

    Nie panuję właśnie nad tym gdzie jeszcze i jak używać przestrzeni nazw - tzn wiem i widzę po tym co sam kompilator wygenerował gdzie są one zadeklarowane ale też chyba nie ma problemu żeby w kodzie bezpośrednio się odwołać jak pisałem

    System::Convert::ToString();

    Próbuję dojść co jest pod tą maską. A tworzenie GUI nie jest mi obce i w Delphi bardzo dobrze sobie z tym radziłem więc nie jest tak źle

    zrozum, że tu nie znam po prostu składni ani zasad jeszcze a naukę czystego C++ też już prawie mam za sobą - tzn taki pierwszy powiedzmy przebieg. I co z tego, skoro biorę narzędzie VC++ i nie wiem jak się nim posługiwać

    Odsyłanie mnie więc do pisania tylko aplikacji konsolowych lub coś w tym stylu to jednak niezbyt duża pomoc jak dla mnie. Potrzebuję szybko przejść chociaż pierwsze kroki z VC++ i tworzeniem okienek

    Muszę szybko zacząć programowanie z udziałem wątków itp, więc to z GUI to tylko "duperele"

    0
  • #13 06 Maj 2010 14:32
    utak3r
    Poziom 25  

    mirekk36 napisał:
    ale też chyba nie ma problemu żeby w kodzie bezpośrednio się odwołać jak pisałem

    System::Convert::ToString();


    Chodzi o to, że podałem Ci:

    utak3r napisał:

    i używasz tego np. tak:

    Code:
    long liczba = 15;
    
    std::string mojtekst = ToString<long>(liczba);


    czyli z jawnym podaniem użytego typu parametru, natomiast Dr.Vee sugeruje, aby ten element (podpowiadanie szablonowi typu przekazywanego parametru) pozostawić kompilatorowi, czyli aby pisać tak:

    Code:

    std::string mojtekst = ToString(liczba);

    0