c ++:将地址存储为字符串

时间:2013-06-02 14:52:15

标签: c++ string pointers casting

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

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

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

5 个答案:

答案 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());
}