Adresse einer Variable ToString()



  • hallo leute!
    ich hab da mal ne gaaanz komische frage!

    mal angenommen ich hab da eine integer variable (datentyp ist eigentlich egal)
    nun.. wie könnte ich die adresse dieser integer variable einer string variable übergeben?

    ich weiß dass das nicht geht, nur damit ihr wisst was ich in etwa meine:

    int value = 123; // zB.: 001234F oder so ^^
    wchar_t adresse;
    
    adresse = &value;
    
    wcout << adresse << endl;
             // gew. ausgabe: 001234F
    

    weiß jemand wie das gehen könnte?



  • cout << (int)adresse;



  • cout << hex << (int) adresse;



  • cout << hex << (int)&adresse;



  • das funzt nicht ..

    Fehler 1 error C2440: '=': 'int *__w64 ' kann nicht in 'wchar_t' konvertiert werden



  • oho das funzt doch 🙂

    aber wie kann ich den wert hexadezimal ausgeben?
    also

    bei diesm code:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main()
    {
    	int value = 123;
    	wchar_t adresse;
    
    	adresse = (wchar_t)&value;
    
    	cout << &value << endl;
    	cout << hex << adresse << endl;
    
    	cin.get();
    	return 0;
    }
    

    geht raus:

    0013FF60 // &value
    ff60 // adresse

    aber wie kann ich die komplette adresse der value ausgeben?



  • cout << &value;



  • $nooc schrieb:

    wchar_t adresse;
    
    adresse = &value;
    

    Dein Fehler liegt darin, daß wchar_t nur eine garantierte Breite von 16 bit hat, während ein Pointer (das, was der &-Operator zurückliefert) je nach Plattform duetlich mehr (32 oder 64 bit) haben kann. Dadurch schneidest du natürlich den Rest ab (dein Compiler sollte dir dazu mindestens eine Warnung zu geben.
    Wenn du unbedingt eine Variable nehmen willst, nimm den richtigen Datentyp dafür, nämlich "int *", also einen Zeiger auf einen Integer, denn das ist es, was du mit "&value" tatsächlich hast.



  • int main() 
    { 
        int value = 123; 
        //wchar_t adresse; 
        int* adresse;//!!
        adresse =  &value//(wchar_t)&value; 
    
        cout << hex << &value << endl; 
        //oder das ist  gleich und die Adresse wchar brauchste nicht
        cout << hex << adresse << endl; 
        cin.get(); 
        return 0; 
    }
    

    🙂



  • ich brauch das aber als string ... O_o



  • Dann interessierst du dich vielleicht für einen std::ostringstream oder für sprintf().



  • $nooc schrieb:

    ich brauch das aber als string ... O_o

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
       int value = 123;
       string adresse;
       cout << hex << (int)&value;
       getline(cin, adresse);
       cout << endl << adresse << endl;
    }
    

    🕶



  • $nooc schrieb:

    ich brauch das aber als string ... O_o

    Aha !!
    Das hatte ich nicht sofort so verstanden.
    Dann würde ich (wie von tommie-lie vorgeschlagen) Folgendes machen:

    #include <string>
    #include <sstream>
    using namespace std;
    
    int main()
    {
        int value = 123;
        string adresse_string;
        ostringstream adresse_stringstream;
    
        // ostringstream funktioniert genauso wie cout
        adresse_stringstream << hex << &value;
    
        // Wenn Du den Inhalt als String manipulieren willst, kopierst Du
        // es in ein eigenes Stringobjekt
        adresse_string = adresse_stringstream.str();
    
        return 0;
    }
    

    Gruß,

    Simon.

    P.S.: geries "cout/cin-Umweg" halte ich für "verbesserbar". 😉



  • Simon2 schrieb:

    P.S.: geries "cout/cin-Umweg" halte ich für "verbesserbar". 😉

    Verbesserbar?! Also mindestens die Aufforderung, die gerade ausgegebene Adresse wieder einzutippen (und sich dabei nicht zu verschreiben) fehlt 😃


Log in to reply