私がオブジェクトを持っていると言う
MyObj stuff;
もののアドレスを取得するには、私は印刷します
cout << &stuff << endl; 0x22ff68
0x22ff68を文字列に保存したい。私はあなたがこれを行うことができないことを知っています:
string cheeseburger = (string) &stuff;
これを達成する方法はありますか?
私がオブジェクトを持っていると言う
MyObj stuff;
もののアドレスを取得するには、私は印刷します
cout << &stuff << endl; 0x22ff68
0x22ff68を文字列に保存したい。私はあなたがこれを行うことができないことを知っています:
string cheeseburger = (string) &stuff;
これを達成する方法はありますか?
std::ostringstreamを使用できます。この質問も参照してください。
しかし、あなたが本当に意味のあるものでなければならないアドレスを期待しないでください。同じデータを使用する同じプログラムの実行ごとに異なる可能性があります(アドレス空間配置のランダム化などのため)。
ポインタのアドレスを文字列に保存してから、アドレスをポインタに戻す方法は次のとおりです。const
これは、実際には保護を提供しなかった概念実証として行いましたが、この質問にはうまく答えられると思います。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
// create pointer to int on heap
const int *x = new int(5);
// *x = 3; - this fails because it's constant
// save address as a string
// ======== this part directly answers your question =========
ostringstream get_the_address;
get_the_address << x;
string address = get_the_address.str();
// convert address to base 16
int hex_address = stoi(address, 0, 16);
// make a new pointer
int * new_pointer = (int *) hex_address;
// can now change value of x
*new_pointer = 3;
return 0;
}
文字列形式を使用してみることができます
char strAddress [] = "0x00000000"; //注:正しいサイズを割り当てる必要があります。ここでは、32ビットアドレスを使用していると想定しています。
sprintf(strAddress、 "0x%x"、&stuff);
次に、通常の文字列コンストラクターを使用して、このchar配列から文字列を作成します