Devo rappresentare i puntatori come stringhe all'utente. A volte i valori possono essere salvati su un file e trasferiti su un computer con architettura diversa (32 vs 64 bit è il problema principale attualmente) e caricati da file di testo per essere confrontati - sto solo andando a confrontare i valori caricati l'uno con l'altro, ma preferirei comunque confrontare i numeri rispetto alle stringhe.Qual è il modo migliore per rappresentare il puntatore come stringa in C++?
Attualmente sto usando:
SomeClass* p;
...
printf("%ld", (uintptr_t)p);
ma mi chiedo se questo è portatile (Windows e Linux sono solo importante in questa fase però), e se questo sarebbe rompere una volta i sistemi a 128 bit si presentano?
Edit: a meno che non decido di usare uint64_t, e decidere che a 64 bit è il tetto, questo non può essere fatto perché alcuni puntatore a 64 bit potrebbe essere al di fuori gamma a 32 bit integer. Quindi, ho deciso che sarebbe stato più sicuro confrontare le stringhe anche se è più lento.
Ma non è portatile. Almeno, non ha dato un output coerente tra le piattaforme. In Visual Studio, i valori esadecimali sono espressi in maiuscole.In gcc, in minuscolo. – user48956
* scuote la testa * Questa differenza vale anche la pena di preoccuparsi? È possibile che _never_ gli indirizzi vengano visualizzati allo stesso modo su tutte le piattaforme, ad esempio, nei programmi DOS in modalità reale a 16 bit, gli indirizzi vengono solitamente stampati in formato xxxx: yyyy. (Non è possibile rimuovere i due punti "solo per essere coerenti tra le piattaforme" --- sarebbe molto fuorviante, perché lo spazio degli indirizzi nei programmi DOS in modalità reale non è piatto.) –
ad esempio, 0x11110000 e 0x11120000, nel modello di indirizzamento piatto , è 0x10000 byte a parte. Tuttavia, nei programmi DOS in modalità reale a 16 bit, 1111: 0000 e 1112: 0000 sono separati da 16 byte. –