0

我正在尝试将指针的地址存储为字符串。换句话说,我想将构成地址的字节的内容插入到 char 向量中。

这样做的最佳方法是什么?

我需要一个完全可移植的方法,包括 64 位系统。

4

5 回答 5

2

最简单的方法是做

char buf[sizeof(void*) * 2 + 3];
snprintf(buf, sizeof(buf), "%p", /* the address here */ );
于 2013-06-02T14:57:48.933 回答
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());

为了将包含十六进制表示的数组拆分为单个字符(无论什么意义),我会使用 stringstream - 正如其他一些人已经建议的那样。您还可以使用 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());
于 2013-06-02T16:18:25.260 回答
1
std::string serialized (std::to_string ((intptr_t) ptr));
于 2013-06-02T15:03:44.447 回答
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;

}
于 2013-06-02T15:04:19.803 回答
0
void storeAddr(vector<string>& v,void *ptr)
{
    stringstream s;
    s << (void*)ptr ;
    v.push_back(s.str());
}
于 2013-06-02T15:03:04.400 回答