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

convert pointer value to string and back again

本文关键字:转换 串并 回来 字符串 指针 字符      更新时间:2023-10-16

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

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

你的计划听起来不像是要工作,因为一个进程中的有效内存地址可能是另一个进程中的无效内存地址…尽管如此,以下是您可以做到的:

  • 第一个进程呼叫sprintf(str,"%p",ptr)
  • 在第二个进程中,调用sscanf(str,"%p",&ptr)
  • 在32位系统上,你需要声明char str[8+1]
  • 在64位系统上,需要声明char str[16+1]

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

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

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)。

也就是说,您的问题抽象了地址虚拟化(取决于您运行代码的位置和条件,它可能无法工作)。

bufferoverflowsafe,老派C版本:

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