将指针值转换为字符串并再转换回来
convert pointer value to string and back again
如果我有一个指向int的指针,它的值是0x0012FF7C
我怎么能将这个值存储在字符串中,然后反向(我的意思是将存储在字符串中的值转换为int*
)
我需要这种方式,因为我需要在PVM的两个进程之间发送内存位置,所以我需要将指针的值作为字符串发送,并在第二个进程中接收此字符串并将其值存储在指针
你的计划听起来不像是要工作,因为一个进程中的有效内存地址可能是另一个进程中的无效内存地址…尽管如此,以下是您可以做到的:
- 第一个进程呼叫
sprintf(str,"%p",ptr)
- 在第二个进程中,调用
sscanf(str,"%p",&ptr)
在32位系统上,你需要声明 - 在64位系统上,需要声明
char str[16+1]
char str[8+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);
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将 S1 转换为回文,并将 S2 作为其子字符串
- 将分数转换为十进制数并对其进行排序
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 将浮点数转换为无符号字符数组并打印出来
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 如何以滑动窗口方式从 std::bitset 读取位并将它们转换为 int?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 字符串的矢量并使用 C++20 范围进行转换
- 将包含多个元素的字符串作为输入并转换为矢量 C++
- 如何从一个容器中获取某些元素并将其转换插入到另一个容器中?
- 我正在尝试编写将 ASCII 转换为十进制、添加并转换回 ASCII 的软件
- 转换 mp4 文件并将其流式传输到带有树莓派的查看器
- 是否强制转换void**并将第一个字节设置为nullptr
- 将标准字符串转换为 ascii 字符并通过串行端口 c++ 发送
- long/int到UINT64的转换,并在C#上返回long-何时可以丢失数据
- 转换int并将其与char*连接
- 在构造函数中强制转换void*并访问值