Speicheradresse zu String
-
Die Frage ist einfach, wie könnte man eine Hexadezimale Speicheradresse als String- / Char-Array abspeichern bzw. in einen String schreiben?
-
std::string s = (std::istringstream() << std::hex << reinterpret_cast<std::intptr_t>(ptr)).str();Ungetestet.
-
314159265358979 schrieb:
std::string s = (std::istringstream() << std::hex << reinterpret_cast<std::intptr_t>(ptr)).str();Ungetestet.
Muss doch ein
ostringstreamsein?
-
Hacker schrieb:
Muss doch ein
ostringstreamsein?Rate doch mal, wer von euch beiden wohl Recht hat. Und dann probier's zur Sicherheit nochmal aus.
-
314159265358979 schrieb:
std::string s = (std::istringstream() << std::hex << reinterpret_cast<std::intptr_t>(ptr)).str();Ohne es jetzt ausprobiert zu haben: Brauchen wir keinen lvalue auf der linken Seite vom operator<<?
-
Bashar schrieb:
Ohne es jetzt ausprobiert zu haben: Brauchen wir keinen lvalue auf der linken Seite vom operator<<?
Das temporäre Objekt ist ja nicht konstant. Das ist doch diese komische Sonderklausel, die genau solche Konstrukte erlaubt.
@Hacker: Ich hoffe, du hast inzwischen ausprobiert und herausgefunden, dass du richtig rum gedacht hast
. Dummerweise funktioniert beides nicht, da am Ende kein stringstream mehr rauskommt.
-
Funktioniert das so denn überhaupt?
operator<<gibt hier doch einenstd::ostreamzurück, und der bietet die Methodestr()doch gar nicht an, oder?Edit: Zu spät.
-
SeppJ schrieb:
Bashar schrieb:
Ohne es jetzt ausprobiert zu haben: Brauchen wir keinen lvalue auf der linken Seite vom operator<<?
Das temporäre Objekt ist ja nicht konstant. Das ist doch diese komische Sonderklausel, die genau solche Konstrukte erlaubt.
Meinst du weil der operator<< in dem Fall eine Memberfunktion ist? Wusste ich gar nicht, und jetzt kommt mir diese Klausel auch ziemlich unlogisch vor.
-
Bashar schrieb:
Meinst du weil der operator<< in dem Fall eine Memberfunktion ist?
Ja.
Wusste ich gar nicht, und jetzt kommt mir diese Klausel auch ziemlich unlogisch vor.
Ja, die ist ein bisschen komisch.
-
Ja, aber das zurück gegebene ostream-Objekt lässt sich wieder zurückcasten, oder?

Edit: Nein, zur Not wird einfach eine Instanz erzeugt und es wird alles separat getan (und man macht statt einer eben drei Zeilen -.-).SeppJ schrieb:
Hacker schrieb:
Muss doch ein
ostringstreamsein?Rate doch mal, wer von euch beiden wohl Recht hat. Und dann probier's zur Sicherheit nochmal aus.
Ich dachte, Mac-User machen nie was falsch, und der Computer hat ein eingebautes Erkennungssystem dass jeglichen unschönen oder gar falschen Code oder unschönes Design automatisch durch das bestmögliche ersetzt...
-
Das funktioniert:
#include <iostream> #include <sstream> using namespace std; int f=1; class var { }; ostream &operator<< (ostream &os, var &v ) { return os<< &f ; } int main() { string s; var v; stringstream str; str << hex<< v; str >> s; cout<< hex << &f << endl; // Zur Kontrolle cout<<"Speicheradresse der Variable f in hex: " << s<<endl; return 0; }
-
Spitzbube schrieb:
Das funktioniert:
#include <iostream> #include <sstream> using namespace std; int f=1; class var { }; ostream &operator<< (ostream &os, var &v ) { return os<< &f ; } int main() { string s; var v; stringstream str; str << hex<< v; str >> s; cout<< hex << &f << endl; // Zur Kontrolle cout<<"Speicheradresse der Variable f in hex: " << s<<endl; return 0; }Was zum Teufel ist das für ein Scheiß?
Das einfachste, schnellste Ergebnis wäre das hier:
int a; std::string speicheradresse(boost::lexical_cast<std::string>(&a));
-
Hacker schrieb:
Was zum Teufel ist das für ein Scheiß?
Hab ich mir genau in diesem Moment auch gedacht.

-
-
SeppJ schrieb:
http://en.cppreference.com/w/cpp/string/basic_string/to_string
Das unterstützt mein Compiler nicht. Außerdem ist
lexical_castschneller, wetten?
-
1. Dann nimm nen besseren Compiler.
2. Bezweifle ich, lexical_cast ist langsam wie eingeschlafene Füße, dank dem Designfetisch der Boost Devs.
-
Ethon schrieb:
1. Dann nimm nen besseren Compiler.
Ich hab den GCC.

Es gibt mit Abstand nichts besseres.
Aber wo gibt es den MinGW mit dem neuesten GCC 4.7 (32-Bit, wenn möglich) zum download? Ich hab 4.6.1 :gespannt:
-
Natürlich unterstützt der GCC 4.6 to_string . Sicher dass es nicht geht? <string> eingebunden?
-
#include <iostream> #include <string> int main() { std::string s = std::to_string(5); std::cout << s; }GCC 4.6.2 und auch 4.7 schrieb:
Fehler: »to_string« ist kein Element von »std«
Also das versteh' ich jetzt echt nicht.
Auszug aus meiner include/c++/bits/basic_string.h:inline string to_string(int __val) { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int), "%d", __val); }Und sogar das hier gibt dieselbe Fehlermeldung, auch mit -std=c++0x usw.
#include <bits/basic_string.h>Keine Ahnung was da los ist..
-
Da is nix los. Da sind einfach vordefinierte Makros am Werk... ich guck gleich mal welche das sind...
-
Ethon, das ist unfair! Wieso darfst du
to_stringbenutzen und ich nicht?