cs_remzz
Messages postés7Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention30 avril 2004
-
6 mars 2004 à 20:45
cs_remzz
Messages postés7Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention30 avril 2004
-
8 mars 2004 à 15:09
Bonjour à tous,
Je débute alors peut-être ma question est-elle idiote. La voici :
Avec l'extrait de code suivant (en C) :
------------------
char* key;
int studentid = 9942;
...
printf("key[6] = %x\n",(studentid & 255));
key[6] = (studentid & 255);
printf("key[6] = %x\n",key[6]);
-------------------
cs_remzz
Messages postés7Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention30 avril 2004 7 mars 2004 à 00:34
Non, il me semble que c'est la bonne méthode pour afficher le contenu d'un tableau.
De plus il affiche toujours la valeur que j'ai attribuée avant, mais avec systématiquement ffffff devant.
Si j'affiche la valeur en tant qu'entier (%i), j'obtiens un nombre négatif.
Ce que je ne comprends pas c'est que le contenu de la case est un char, donc 1 octet, donc deux caractères en hexa. Mais là il m'en affiche 8 !
C'est une erreur d'affichage ou bien la valeur du tableau est bien celle affichée ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 mars 2004 à 23:45
lorsque tu fait :
printf("key[6] = %x\n",(studentid & 255));
studentid est un int (32 bits) signé et le résultat est un int signé (en hexa : 0xD6, en décimale : 214)
maintenant, si tu affecte ce résultat à key[6] qui un char (8 bits) signé, tout ce passe bien, key[6] contient bien 0xD6 en hexa mais comme les char sont signés, ce nombre est négatif !!! (-42)
maintenant lorsque tu l'affiche, key[6] est tout d'abord convertit en int avec extension du bit de signe, c'est pour cela que tu as des FFF au début.
printf("key[6] = %x\n",key[6]);
si tu essaye avec %d au lieu de %x tu verra que le nombre est négatif.
pour éviter cela, déclare tout char comme unsigned