将指针值转换为字符串并再次返回

时间:2014-05-15 15:03:34

标签: c++ pointers

如果我有一个指向int的指针,它的值是0x0012FF7C我如何将这个值存储在一个字符串中,然后反过来(我的意思是将存储在string中的值转换为int*

我需要这种方式,因为我需要在PVM中的两个进程之间发送一个内存位置,所以我需要将一个指针的值作为字符串发送,并在第二个进程中接收该字符串并将其值存储在指针中

3 个答案:

答案 0 :(得分:3)

您的计划听起来不会起作用,因为一个进程中的有效内存地址可能是另一个进程中的无效内存地址......不过,这是您可以这样做的方法:

  • 在第一个过程中,请致电sprintf(str,"%p",ptr)
  • 在第二个过程中,请致电sccanf(str,"%p",&ptr)
  • 在32位系统上,您需要声明char str[8+1]
  • 在64位系统上,您需要声明char str[16+1]

话虽如此,您可能需要发送内存地址的内容,或者如果为此目的太长,则将它们写入一个文件中的一个文件中并从该文件中读取它们另一个过程。

答案 1 :(得分:0)

这应该可以转换为字符串:

std::size_t i = 0x0012FF7C;
std::ostringstream buffer;
buffer << std::setw(size_t(void*)) << std::setfill('0') << std::hex << i;
assert(buffer.str() == "0012FF7C");

对于读取,您可以以类似的方式使用std :: istringstream(虽然我认为您需要读取字符串,然后根据基础将其转换为int)。

那就是说,你的问题是地址虚拟化的抽象(取决于你运行你的代码的位置以及在哪些条件下它可能不起作用)。

答案 2 :(得分:0)

Bufferoverflow-safe,旧学校C版:

  char addr[0xf];
  snprintf(addr, 0xf, "0x%X", ptr);