我正在尝试将指针的地址存储为字符串。换句话说,我想将构成地址的字节内容插入到char矢量中。
这样做的最佳方式是什么?
我需要一个完全可移植的方法,包括64位系统。
答案 0 :(得分:2)
最简单的方法是
char buf[sizeof(void*) * 2 + 3];
snprintf(buf, sizeof(buf), "%p", /* the address here */ );
答案 1 :(得分:2)
要获得地址实际字节的数组(或向量,如果你愿意的话),这应该可以解决问题:
int foo = 10;
int* bar = &foo;
// Interpret pointer as array of bytes
unsigned char const* b = reinterpret_cast<unsigned char const*>(&bar);
// Copy that array into a std::array
std::array<unsigned char, sizeof(void*)> bytes;
std::copy(b, b + sizeof(void*), bytes.begin());
要获得一个包含十六进制表示的数组,将其拆分为单个字符(无论有什么意义),我都会使用字符串流 - 正如其他一些人已经建议的那样。你也可以使用snprintf来获取地址的字符串表示,但这更像是C风格的方式。
// Turn pointer into string
std::stringstream ss;
ss << bar;
std::string s = ss.str();
// Copy character-wise into a std::array (1 byte = 2 characters)
std::array<char, sizeof(void*) * 2> hex;
std::copy(s.begin(), s.end(), hex.begin());
答案 2 :(得分:1)
std::string serialized (std::to_string ((intptr_t) ptr));
答案 3 :(得分:1)
C ++方法这将是使用字符串流
#include <string>
#include <sstream>
int main()
{
MyType object;
std::stringstream ss;
std::string result;
ss << &object; // puts the formatted address of object into the stream
result = ss.str(); // gets the stream as a std::string
return 0;
}
答案 4 :(得分:0)
void storeAddr(vector<string>& v,void *ptr)
{
stringstream s;
s << (void*)ptr ;
v.push_back(s.str());
}