Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260

    [C] Notazione esadecimale

    ciao a tutti
    vengo subito al dunque.
    Non me ne intendo bene di C.Infatti vorrei capire bene questo discorso:
    Ho il seguente array:

    codice:
    unsigned char toWrite[4];
    che lo riempo in questo modo:

    codice:
    toWrite[0]=0xAA;
    toWrite[1]=0xAA;
    toWrite[2]=0xAA;
    toWrite[3]=0xAA;
    le mie domande sono queste:
    1) che significa un char "unsigned" ?
    2)0xAA è esadecimale giusto? ma perchè cè quel 0x prima dell' AA?
    3) L'array formato da 4 celle viene scritto dentro una carta fisica che è divisa a livello logico in byte.
    Tramite una funzione che prende questo array toWrite, scrivo all'interno della carta e vado ad occupare 4 byte,uno per cella dell'array.Ora non capisco il nesso che cè fra 1byte e la notazione esadecimale....scrivere 0xAA occupa un byte?? 1byte sono 8 bit,quindi dentro un byte mi ci sta un numero compreso tra 0 e 256 (2 alla 8) ....se traduco AA in decimale è 170,quindi sta dentro al mio intervallo....sto ragionando giusto??

    grazie1000

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C] Notazione esadecimale

    1) che significa un char "unsigned" ?
    Tipo char senza segno, ovvero un byte in binario puro e non in complemento a due.

    2)0xAA è esadecimale giusto? ma perchè cè quel 0x prima dell' AA?
    Appunto per indicare che e' un valore esadecimale ...

    3) L'array formato da 4 celle viene scritto dentro una carta fisica che è divisa a livello logico in byte.
    Tramite una funzione che prende questo array toWrite, scrivo all'interno della carta e vado ad occupare 4 byte,uno per cella dell'array.Ora non capisco il nesso che cè fra 1byte e la notazione esadecimale....scrivere 0xAA occupa un byte?? 1byte sono 8 bit,quindi dentro un byte mi ci sta un numero compreso tra 0 e 256 (2 alla 8) ....se traduco AA in decimale è 170,quindi sta dentro al mio intervallo....sto ragionando giusto??
    Sì ... tranne che il valore e' compreso tra 0 e 255 ...

    Pero', tutto cio' non ha molto a che vedere con il C, ma con le *basi* dell'informatica ...

    Se chiedi cosa e' un byte e se ha 8 bit, penso che non stiamo a buon punto ...

  3. #3
    Ma char è un byte dedicato ad un carattere...
    Quindi è già unsigned ossia char == char unsigned o erro ?
    Experience is what you get when you don’t get what you want

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Xaratroom
    Ma char è un byte dedicato ad un carattere...
    Quindi è già unsigned ossia char == char unsigned o erro ?
    No ... il char e' un tipo con segno ad 8 bit ... (in complemento a due).

    E' una cosa che confonde, ma in realta' un char e' per default un signed char (quindi un valore numerico a 8 bit in complemento a due).

    I valori associati alla tabella ASCII sono unsigned char.

  5. #5
    Per questo motivo con un semplice char non si riesce a leggere un carattere in ascii esteso ?
    Experience is what you get when you don’t get what you want

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Xaratroom
    Per questo motivo con un semplice char non si riesce a leggere un carattere in ascii esteso ?
    In che senso ...?

  7. #7
    ad esempio
    cout << " è più";
    sia 'è' che 'ù' non sono visualizzate correttamente
    Experience is what you get when you don’t get what you want

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... questo fatto dipende dalle impostazioni internazionali e da tante altre cose che non hanno a che vedere ...

  9. #9
    errore mio
    Experience is what you get when you don’t get what you want

  10. #10
    Ti stavo tartassando, quando bastava fare un piccolo esempio:
    #include <iostream.h>
    #include <stdlib.h>

    int main()
    {
    char a = 'é'; //82h --> 1000 0010
    unsigned char b = 'é';
    cout << endl << a << '\t' << b;
    if (a >= 0)
    cout << "\n Il primo numero e' positivo";
    else
    cout << "\n Il primo numero e' negativo";

    if (b >= 0)
    cout << "\n Il secondo numero e' positivo";
    else
    cout << "\n Il secondo numero e' negativo";
    cout << endl << endl;
    system("PAUSE");
    return 0;
    }

    grazie
    Experience is what you get when you don’t get what you want

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.