получить содержимое запрограммированного адреса памяти в переполнении стека

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

ошибка: неверное приведение типа ‘double’ к типу ‘char *’

Итак, если я использую тип long или int, это работает, но с типом double это не работает.
Как я могу это сделать?

Спасибо!

РЕДАКТИРОВАТЬ: я программирую расширение PHP на C ++, это «содержимое» пользовательской функции «get_memory_data (двойной адрес)», в php вы используете:

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

2

Решение

Сначала приведите к целому числу:

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

std::string i_cause_undefined_behaviour(p);
5

Другие решения

Не имеет смысла хранить двойной адрес памяти, это не причина, по которой компилятор не позволит вам, но это, конечно, не помогает. На 64-битных платформах вам нужно 64-битные данные для точного хранения адреса памяти, но двойной тип может содержать только 53-битную точность.

Если вы хотите жестко запрограммировать адрес памяти, вы должны сохранить его в uintptr_t.

4

По вопросам рекламы [email protected]