Cette réponse est pour aider à élargir notre dialogue dans les commentaires.
S'il vous plaît voir le code suivant comme exemple:
#include <stdio.h>
#include <string.h>
#include <string>
int main()
{
// Part 1 - Place some C-string in memory.
const char* const pszSomeString = "delicious";
printf("SomeString = '%s' [%08p]\n", pszSomeString, pszSomeString);
// Part 2 - Suppose we need this in an int representation...
const int iIntVersionOfAddress = reinterpret_cast<int>(pszSomeString);
printf("IntVersionOfAddress = %d [%08X]\n", iIntVersionOfAddress, static_cast<unsigned int>(iIntVersionOfAddress));
// Part 3 - Now bring it back as a C-string.
const char* const pszSomeStringAgain = reinterpret_cast<const char* const>(iIntVersionOfAddress);
printf("SomeString again = '%s' [%08p]\n", pszSomeStringAgain, pszSomeStringAgain);
// Part 4 - Represent the string as an std::string.
const std::string strSomeString(pszSomeStringAgain, strlen(pszSomeStringAgain));
printf("SomeString as an std::string = '%s' [%08p]\n", strSomeString.c_str(), strSomeString.c_str());
return 0;
}
Partie 1 - La variable pszSomeString
devrait représenter la chaîne réelle en mémoire que vous essayez de rechercher (une valeur arbitraire, mais 0x00020348
pour l'amour de votre Exemple).
Partie 2 - Vous avez mentionné que vous stockez la valeur de pointeur comme int
, donc iIntVersionOfAddress
est une représentation entière du pointeur.
Partie 3 - Ensuite, nous prenons l'entier « pointeur » et restaurer un const char* const
afin qu'il puisse être traité comme une chaîne de C à nouveau.
Partie 4 - Enfin, nous construisons un std::string
en utilisant le pointeur C-string et la longueur de la chaîne. Vous n'avez pas réellement besoin de la longueur de la chaîne car le C-string est un caractère nul ('\0'
) -terminated, mais j'illustre cette forme du constructeur std::string
dans le cas où vous devez calculer vous-même la longueur .
La sortie est la suivante:
SomeString = 'delicious' [0114C144]
IntVersionOfAddress = 18137412 [0114C144]
SomeString again = 'delicious' [0114C144]
SomeString as an std::string = 'delicious' [0073FC64]
Les adresses de pointeur varient, mais les trois premières valeurs de pointeur hexagonale sont les mêmes, comme on pouvait s'y attendre. Le nouveau tampon de chaîne construit pour la version std::string
est une adresse complètement différente, également comme prévu.
Note finale - ne sachant rien de votre code, un void*
serait normalement considéré comme une meilleure représentation d'un pointeur générique qu'un int
.