Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Convertire un char in intero

    se faccio semplicemente:

    codice:
    int i;
    char c;
    
    i = int(c);
    non mi funziona bene, da quello che ho capito i char da 0 a 128 li converte bene, gli altri "al contrario". Perché
    Come posso fare la conversione ?

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    A me pare che dovrebbe convertirli bene...
    Sono tutti e due signed! :master:

  3. #3
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    Prova così: a me ha funzionato benone!!

    int main()
    {
    int i = cin.get();
    cout << i;

    system("PAUSE");
    return 0;
    }
    la variabile intera i assume per valore il carattere letto..
    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)

  4. #4

    non ci avevo mai fatto caso ma..

    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

  5. #5
    Utente di HTML.it L'avatar di EkoZZ
    Registrato dal
    Jul 2003
    Messaggi
    117
    Ma per fare un casting non si utilizza
    codice:
    char c;
    int i=(int)c;
    :master:
    Yes, Linux is better... It does infinites loops in 5 seconds...
    ~Linus Torvalds~

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    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

  7. #7
    Originariamente 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
    Contiene 4294967214 su compilatori a 32 bit con cpu intel x86

    c = 174 in binario 10101110

    (unsigned int)(c)
    estende il segno di c fino a 32 bit tramite movsx
    codice:
    10101110
    ^
    segno di c
    quindi su CPU intel

    11111111111111111111111110101110 = 4294967214

    Una sola nota finale dallo standard ANSI C89
    Thus, if the conversion is to unsigned int but yields a negative value, the behavior is undefined.
    Sarebbe interassante sapere su RISC cosa accade.
    Chi ha un mac o ppc, può provare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.