2
double address = 3068770752;
std::string hello = (char *)address;

错误:从“double”类型到“char*”类型的无效转换

所以,如果我使用 long 或 int 类型,这是可行的,但对于 double 类型,这是行不通的。我怎样才能做到这一点?

谢谢!

编辑:我正在用 C++ 编写 PHP 扩展,这是自定义函数“get_memory_data(双地址)”的“内容”,在 php 中您使用:

<?php
$a = "hello";
$b = get_memaddress($a); //0x123456
$c = hextodec($b); //3068770752
$d = get_memdata($c); //hello
4

2 回答 2

5

首先将其转换为整数:

char * p = reinterpret_cast<char *>(static_cast<uintptr_t>(address));

std::string i_cause_undefined_behaviour(p);
于 2013-01-14T21:33:42.153 回答
4

以双精度存储内存地址是没有意义的,这不是编译器不允许你的原因,但它肯定没有帮助。在 64 位平台上,您需要 64 位来准确存储内存地址,但双精度只能保持 53 位。

如果你想硬编码一个内存地址,你应该把它存储在一个 uintptr_t 中。

于 2013-01-14T21:37:38.573 回答