2010-02-04 2 views

Répondre

3
string& s = *reinterpret_cast<string*>(your_ulong); 
7

réponse de @KennyTM est juste sur l'argent si par « essentiellement d'une chaîne » vous voulez dire qu'il est un pointeur vers une instance de la classe std::string. Si vous voulez dire que c'est un pointeur sur une chaîne C, que je soupçonne peut-être plus probable, vous avez besoin:

char *s = reinterpret_cast<char *>(your_ulong); 

Ou, dans votre cas:

whcar_t *s = reinterpret_cast<wchar_t *>(your_ulong); 

Notez également que vous ne pouvez pas en toute sécurité stocker des pointeurs dans n'importe quel type intégral ancien. Je peux faire un compilateur avec un type 32 bits long et un type de pointeur 64 bits. Si votre compilateur le supporte, un moyen approprié de stocker des pointeurs en nombres entiers est d'utiliser les types stdint.hintptr_t et uintptr_t, qui sont garantis (par la norme C99) suffisamment grands pour stocker les types de pointeurs.

Cependant, C99 ne fait pas partie de C++, et de nombreux compilateurs C++ (lire: Microsoft) peuvent ne pas fournir ce genre de fonctionnalité (car qui a besoin d'écrire du code portable?). Heureusement, stdint.h est assez utile pour que des solutions existent, et des implémentations portables (et gratuites) de stdint.h pour la compatibilité avec les compilateurs plus anciens peuvent être trouvées facilement sur Internet.

+0

Bien sûr, j'aurais probablement utilisé un casting de style C, mais c'est parce que je suis un programmeur C dans l'âme. –

+0

Pour des raisons pratiques, 'size_t' est aussi grand qu'un pointeur si un type entier est. – Potatoswatter

+0

@Potatoswatter - Pour des raisons pratiques, oui, il le fera, mais j'ai effectivement posé une question il y a un certain temps (http://stackoverflow.com/questions/1464174/size-t-vs-intptr-t) à propos de savoir si c'était un kludge ou une exigence logique. Il s'avère que, pour _full_portability, 'size_t' est insuffisant. Pas tellement pour le présent, mais dans le passé et peut-être dans le futur (car qui peut le prévoir?). –

Questions connexes