说我有一个对象
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;
}
您可以尝试使用字符串格式
字符 strAddress[] = "0x00000000"; // 注意:你应该分配正确的大小,这里我假设你使用的是 32 位地址
sprintf(strAddress, "0x%x", &stuff);
然后你使用普通的字符串构造函数从这个 char 数组创建你的字符串