2012-11-13 3 views
0

J'ai rencontré un problème très étrange. Je pense qu'il me manque quelque chose de très basique ici. Quand je fais cela:Hexadécimal à décimal avec un caractère donnant des résultats étranges?

char buffer[1] = {0xA0}; 
    int value=0; 
    value = (int)buffer[0]; 
    printf("Array : %d\n",value); 

Je reçois comme résultat -96, ce qui ne devrait pas se produire. Il devrait me donner 160, car le nombre hexa 0xA0 signifie 160 en décimal. Quand je mets de petites valeurs dans le tampon comme 0x1F, ça marche bien. Quelqu'un peut-il me dire ce qui me manque ici?

+1

'0xA0 == -96' en tant que valeur de 8 bits signé. –

Répondre

5

char est signé -128 à 127

déclarer buffer comme unsigned char ou coulé à unsigned char:

char buffer[1] = {0xA0}; 
int value=0; 
value = (unsigned char)buffer[0]; 
printf("Array : %d\n",value); 
+0

Ensuite, si je veux 160, mais je dois utiliser char. Y at-il un travail autour? –

+1

@UnderDog converti en caractère non signé, puis int, peut-être? –

+0

En fait, il y a un travail autour. Si je fais un char non signé, cela fonctionne comme un charme. #Juste remarqué –

Questions connexes