2 votes

Obtenir le contenu d'une adresse mémoire codée en dur en C++.

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

error : invalid cast from type 'double' to type 'char*' (erreur)

Ainsi, si j'utilise le type long ou int, cela fonctionne, mais avec le type double, cela ne fonctionne pas. Comment puis-je faire ?

Merci !

EDIT : je programme une extension PHP en C++, ceci est le "contenu" d'une fonction personnalisée "get_memory_data(double address)", en php on utilise :

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

5voto

Kerrek SB Points 194696

Transformez-le d'abord en un nombre entier :

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

std::string i_cause_undefined_behaviour(p);

4voto

jleahy Points 3678

Cela n'a pas de sens de stocker une adresse mémoire dans un double, ce n'est pas la raison pour laquelle le compilateur ne vous laisse pas faire, mais cela n'aide certainement pas. Sur une plateforme 64 bits, vous avez besoin de 64 bits pour stocker avec précision une adresse mémoire, mais un double ne peut contenir que 53 bits de précision.

Si vous voulez coder en dur une adresse mémoire, vous devez la stocker dans un uintptr_t.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X