se faccio semplicemente:
non mi funziona bene, da quello che ho capito i char da 0 a 128 li converte bene, gli altri "al contrario". Perchécodice:int i; char c; i = int(c);
Come posso fare la conversione ?
se faccio semplicemente:
non mi funziona bene, da quello che ho capito i char da 0 a 128 li converte bene, gli altri "al contrario". Perchécodice:int i; char c; i = int(c);
Come posso fare la conversione ?
A me pare che dovrebbe convertirli bene...
Sono tutti e due signed! :master:
Prova così: a me ha funzionato benone!!
la variabile intera i assume per valore il carattere letto..int main()
{
int i = cin.get();
cout << i;
system("PAUSE");
return 0;
}
Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)
dal 128 in poi ti metto la differenza fra il carattere e 128 as esempio 'à' sarebbe uguale a 160 e lui ti scrive -32 (128-160=-32) quindi ti basta fare una cosa del tipo:
int i=0;
char j='à';
i=int(j);
if (i<0)
i=abs(i)+128;
printf( "%c", i);
inoltre il casting esplicito i=int(j) non sarebbe necessario basterebbe i=j ma forse per aumentare la leggibilita e meglio i=int(j) cmq questione di gusti
ciao ciao spero di esserti stato utile![]()
![]()
Ma per fare un casting non si utilizza
:master:codice:char c; int i=(int)c;
Yes, Linux is better... It does infinites loops in 5 seconds...
~Linus Torvalds~
Allora:
io intendevo che il valore, sia in int che in char, sarebbe identico.
Se lo vuoi da 0 a 255, basta che fai un char /int unsigned.
Esempio:
codice:[NON TESTATO] unsigned int ui; int i; char c; unsigned char uc; c = '®'; // Carattere 174 credo, ma è memorizzato come 128 - 174 i = int(c); // Contiene 128 - 174 ui = unsigned int(c); // Contiene 174 uc = unsigned char(c); // 174 uc = '®'; i = int(uc); // Contiene 174 ui = unsigned int(uc); // 174 c = char(uc); // Contiene 128 - 174![]()
Contiene 4294967214 su compilatori a 32 bit con cpu intel x86Originariamente inviato da iguana13
codice:unsigned int ui; int i; char c; unsigned char uc; c = '®'; // Carattere 174 credo, ma è memorizzato come 128 - 174 i = int(c); // Contiene 128 - 174 ui = (unsigned int)c; // Contiene 4294967214 su intel x86
c = 174 in binario 10101110
(unsigned int)(c)
estende il segno di c fino a 32 bit tramite movsx
quindi su CPU intelcodice:10101110 ^ segno di c
11111111111111111111111110101110 = 4294967214
Una sola nota finale dallo standard ANSI C89
Sarebbe interassante sapere su RISC cosa accade.Thus, if the conversion is to unsigned int but yields a negative value, the behavior is undefined.
Chi ha un mac o ppc, può provare?