Pourquoi quand je fais :
char buffer[6] = { 0x33, 0x44, 0x00, 0x06, 0x12, 0x34 };
Le binaire représenté en base 16 est comme ceci : 334400061234
Alors que si je fais :
char buffer[6] = { 0xAB, 0xCD, 0x00, 0x06, 0x12, 0x34 };
Le binaire représenté en base 16 est comme ceci : ffffffabffffffcd00061234
Je m'attendais à avoir des résultats homogènes !
Merci pour vos explications...
# Précisions
Posté par goeb . Évalué à 1.
Précisions :
J'utilise : gcc version 4.4.5 (Debian 4.4.5-8)
Et si j'essaye '\xAB' au lieu de 0xAB, même résultat.
[^] # Re: Précisions
Posté par fearan . Évalué à 3.
quels méthodes utilises tu pour voire la représentation mémoire ?
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Précisions
Posté par goeb . Évalué à 0.
Je m'étais en effet trompé dans mon printf d'affichage de la mémoire à cause du signe de l'entier.
Je faisais en gros ceci : (int)(buffer[i])
au lieu de (char)(buffer[i]).
C'est résolu. Merci.
# Signed char
Posté par reno . Évalué à 10.
Apparemment tes char sont signés donc toute valeur supérieur a 0x7f est considérée comme négative, et il doit y avoir une conversion char --> int quelque part dans ton programme.
# C'est l'extension de signe
Posté par TheBreton . Évalué à 0.
C'est le résultat de plusieurs phénomènes
Le premier c'est l'extension de signe
un char est signé donc le bit MSB indique que c'est positif ou négatif.
Ainsi tout car supérieur à 0x7F est considéré comme négatif.
Si le char en question est chargé dans un registre processeur alors le processeur procède à l'extension de signe sur tout les MSB jusuqu'a 32bits pour conserver la même représentation du chiffre négatif. (car un proc essaye toujours d'utiliser ces registres dans sont mode natif pour des raisons d'optimisation et qui sur les x86 est 32 bits)
-1 sur 8 bits c'est 0xFF
-1 sur 32bit c'est 0xFFFFFFFF
Si tu travaillait en unsigned char tu aurais bien la même représentation en 8 bit qu'en 32bits de tes chiffres car les instructions assembleur utilisé serait ceux ne provoquant pas d'extension de signe.
Le second phénomène c'est sans doute la méthodes que tu utilise pour obtenir ce que tu apelle le binaire en base 16 mais sans indication je ne peut pas expliquer ce qui se passe.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.