Newsgroup: it.comp.lang.c++
Titolo: Conversione: DWORD in CStringArray

Ciao a tutti,
avrei bisogno di un (piccolo?) aiuto.
mi trovo a *dover* scrivere una parte di codice in C++ (nella fattispecie
Visual) che non è il mio linguaggio natio (Delphi è il mio habitat naturale)
e mi trovo di fronte ad un ostacolo che non posso aggirare per una serie di
vincoli imposti da librerie esterne....
Ho necessità di riversare il contenuto di variabili dword all'interno di un
CStringArray. L'ostacolo è come convertire un dword in una stringa (e
viceversa). Ad un profano del C++, come me, sembra un problema banale, ma di
fatto mi sta bloccando.
Se qualcuno potesse illuminarmi...
grazie
Mikelez

 avrei bisogno di un (piccolo?) aiuto.
Risolto!
La soluzione è che non esiste problema che non si possa aggirare ;-)
grazie cmq a chi ha letto il messaggio.

 CStringArray. 
Detto cosi' non sarebbe adatto a questo NG, che si occupa di C++ 
standard (e quindi non di librerie "esterne" come possono essere le 
MFC).
Pero', puoi porre la domanda in termini di C++ standard, come segue:
"Come convertire un intero senza segno a 32 bit in una stringa?"
(...senza mettere in mezzo CString, CStringArray, e DWORD; tanto nel C++ 
standard abbiamo le buone std:: string, vector<string> e "unsigned int" 
[almeno su architetture Win32 con Visual C++ gli "unsigned int" sono a 
32 bit]).
Io ti consiglierei semplicemente di usare la snprintf() per convertire 
da unsigned int a esadecimale; la format specifier dovrebbe essere "%x" 
(o "%X" se vuoi le lettere maiuscole).
L'idea e':
<CODE>
// Converte 32 bit in stringa hex
std::string to_string_hex( unsigned int datum )
{
  // Abbondiamo :-)
  static const int BUF_SIZE_CHARS = 60;
  // Buffer dove andra' la stringa
  char buf[ BUF_SIZE_CHARS ];
  // Facciamo fare la conversione a snprintf(),
  // che e' la versione "sicura" di sprintf()
  snprintf(buf, BUF_SIZE_CHARS, "%X", datum);
  // ...potresti anche controllare il codice
  // di ritorno di snprintf(), che e' -1
  // in caso di errore.
 
  // Converti in std::string
  return std::string(buf);
}
</CODE>
Non ho provato il codice, che ho steso di getto... pero' l'idea di base 
(salvo eventuali bug) dovrebbe essere chiara...
Ora, su questo NG sicuramente ci sara' gente piu' esperta di me sul C++, 
che potra' forse illustrarti un metodo alternativo basato sugli output 
string stream, solo che io non ho molta dimestichezza con questi 
strumenti, e mi affido felicemente alle funzioni della libreria standard 
del C allo scopo.
Tra l'altro, se usi le versioni "sicure" (es.: snprintf() al posto di 
sprintf()) non hai problemi di "buffer overflow" [piu' o meno 
"maliziosi" :-) per le stringhe.]
Spero di essere stato utile.
Ciao,
Dan

 Spero di essere stato utile.
L'ostacolo come ho detto sono riuscito ad aggirarlo, ma se mi dovesse
tornare tra le mani quel codice (e non me lo auguro!) proverò la soluzione
che mi hai proposto (che verrà quindi salvata in apposita cartellina ;-).
Una domanda mi sorge però spontanea (e qui forse l'OT non sarà più possibile
mascherarlo), ma chi usa abitualmente questo strumento (Visual) la
documentazione (MSDN) riesce veramente ad utilizzarla?
Grazie mille.

 Grazie mille.
Prego.