Newsgroup: it.comp.lang.c++
Titolo: conversione

for (int i=0; i<A; i++){
  chiave1[i] = caratteri[rand() % sizeof(caratteri)];
  cout << chiave1[i];
  cout.flags(ios::hex);
  cout << (int)chiave1[i] ;
 }
 cout << endl;
 for (int i=0; i<A; i++){
  chiave1[i] = caratteri[rand() % sizeof(caratteri)];
  cout << chiave1[i];
 }
mi dite dove sbaglio gentilmente!!!
Saluti

D'Amato Daniele wrote:

dovresti prima dirci:
-1 cos'è A;
-2 cos'è caratteri;
-3 cos'è chiave1
-4 cosa ti aspetti che faccia;
-5 cosa fa' effettivamente.
-- 
Nuoto e me ne frego!

const int A=5;
char caratteri[] = {' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*',
'+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '\'', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'};
string chiave1;
for (int i=0; i<A; i++){
  chiave1[i] = caratteri[rand() % sizeof(caratteri)];
  cout << chiave1[i];
  cout.flags(ios::hex);
  cout << (int)chiave1[i] ;
 }
 cout << endl;
 for (int i=0; i<A; i++){
  chiave1[i] = caratteri[rand() % sizeof(caratteri)];
  cout << chiave1[i];
 }
Guardate voi!!
Non converte in hex la stringa che ha generato e vorrei anche che fosse di 5
caratteri invece è di più!!!
Poi il secondo ciclo mi genera un altra stringa, invece deve solo convertire
la stringa che ha generato prima!
Aspetto vostre risposte
Ciao
Se volete qualche altra spiegazione fatemi sapere!!

D'Amato Daniele wrote:
non ho capito bene, comunque guarda qui e dimmi se è quello che ti 
serviva, poi magari te lo spiego:
#include <iostream>
#include <string>
const int A= 5;
char caratteri[] = {' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', 
'*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', 
'8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '\'', 'a', 
'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'};
int main()
{
     using namespace std;
     string chiave1;
     for (int i= 0; i < A; ++i)
     {
         chiave1.insert(chiave1.end(), caratteri[rand() % 
sizeof(caratteri)]);
         cout << chiave1[i];
     }
     cout<< endl;
     cout.flags(ios::hex);
     for (int i= 0; i < A; ++i)
     {
         cout << (int)chiave1[i] << ' ';
     }
     cout<< endl;
     for (int i=0; i<A; i++)
     {
         cout << chiave1[i];
     }
     cout << endl;



Questo pezzo di programma fa la seguente cosa:
mette 5 caratteri a caso presi dal vettore "caratteri" nella
stringa chiave1.
Inoltre per ogni carattere di chiave1 stampa
il caratterese stesso seguito dalla versione esadecimale dell'intero
corrispondente al carattere.
Quindi ad esempio stampa la stringa
n6e{7b636\5cP50
che va interpretata come (se tu mettessi qualche spazio capiresti...):
n=6e  {=7b  6=36  \=5c  P=50
perche', ad esempio, il carattere n corrisponde
(viene memorizzato in un char) come il numero 111 che
in esadecimale si scrive appunto 6E.
Analogamente, per esempio l'ultimo carattere,
P viene memorizzato internamente come il numero 80
che in esadecimale si scrive 50.
Quindi e' naturale che la stringa in hex sia piu'
lunga di 5 caratteri... Tra l'altro stampi anche
i caratteri "in chiaro" quindi stai stampando
sempre 15 caratteri.
Se ti stupisci che il secondo ciclo generi un'altra stringa
invece di convertire (?) la prima allora hai dei gravissimi
problemi di comprensione del C++.
Nel secondo ciclo stai riassegnando valori casuali usando
la rand(). Quindi stai generando una stringa casuale
che non ha alcuna relazione con la prima...
ciao,
g.