Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : mystère hexadécimal [ Archives / Au secours ] (remzz)

samedi 6 mars 2004 à 20:45:16 | mystère hexadécimal

remzz

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]);
-------------------

J'obtiens deux réponses différentes :
------------------
key[6] = d6
key[6] = ffffffd6
------------------

Quelqu'un peut m'expliquer pourquoi je n'obtiens pas la même chose ? Ils sortent d'où tous ces FFFFFF ?

Merci,

Rémy





samedi 6 mars 2004 à 22:27:24 | Re : mystère hexadécimal

LordBob

Membre Club
je peux dire une connerie mais pour afficher la valeur d'un pointeur il ne faut pas faire:
printf("key[6] = %x\n",*key[6]);


je peux pas tester la... et la je cherche un bon tuto que j'vais trouver sur les pointeurs !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."

dimanche 7 mars 2004 à 00:34:21 | Re : mystère hexadécimal

remzz

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 ?

Rémy

dimanche 7 mars 2004 à 01:57:37 | Re : mystère hexadécimal

BruNews

Administrateur CodeS-SourceS

char* key;
int studentid = 9942;
...
printf("key[6] = %x\n",(studentid & 255));
key[6] = (studentid & 255);

precise nous donc si *key a ete alloue, quel buffer pointe-t-il ???


ciao...
BruNews, Admin CS, MVP Visual C++

dimanche 7 mars 2004 à 02:25:02 | Re : mystère hexadécimal

remzz

Voici un code plus détaillé :

-------------------
char key1[7];
int studentid = 9942;

void key_generator(int studentid, char* key){
key[0] = 1;
...
printf("key[6] = %x\n",(studentid & 255));
key[6] = (studentid & 255);
printf("key[6] = %x\n",key[6]);
}

int main(int argc, char *argv[]){
...
key_generator(studentid1,key1);
...
}
----------------

Le but de la fonction key_generator est de remplir key1.

J'espère que ça aide à y voir plus clair...

Rémy

dimanche 7 mars 2004 à 02:27:25 | Re : mystère hexadécimal

remzz

Oups, je me suis trompé en recopiant, il faut bien lire :
key_generator(studentid,key1);

Rémy


dimanche 7 mars 2004 à 23:45:10 | Re : mystère hexadécimal

ymca2003

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

lundi 8 mars 2004 à 15:09:55 | Re : mystère hexadécimal

remzz

En fait le type char m'est imposé. Mais j'ai trouvé une autre méthode : je force le système à n'afficher que le dernier octet :

printf("key[6] = %x\n",(key[6] & 255));

Ca a l'air de marcher.
En tout cas merci pour vos réponses qui m'ont aidé à résoudre ce problème !

Rémy



Cette discussion est classé dans : printf, key, hexadécimal, mystère, studentid


Répondre à ce message

Sujets en rapport avec ce message

Petit jeu en mode texte [:D] [ par thedivxboy ] Alors je carbure en C aujourd'hui ...Pourquoi la tête ne se déplace-t-elle pas au bon endroit ?Pourquoi dois-je mettre un getchar() à un certain endr DestroyWindow [ par wxccxw ] Salut, bon j'ai une boite de dialog d'un programme externe, enfaite, exactement, j'ai une dll qui s'injecte dans un progamme pas allumer et dans le P [help me!] - probleme cryptage simple de fichier [ par darthnexus ] Salut à tous!Je vous explique mon problème: j'ai commencé une petit programme de cryptage tout simple (je débute...) seulement voila cela fonctionne n affichage de tout un double [ par xian240482 ] petit programme : #include #include "stdafx.h" void main() {     double d1 = 3.14159265358979323846;     printf("Pi = %.52f\n",d1);     double d2 = 0 Utilisation des fonctions [ par darkwhite ] Salut  a tous. Je viens juste de decouvrir le C et j'essaie d'ecrire un programme utilisant2 fonctions : pour utiliser le th de pythagore mon code  ee Liste chainée [ par mayapour ] Bonjour, Je souhaite faire une liste chainée d'utilisateurs et pouvoir mettre à blanc, ajouter, supprimer, lister et trier cette liste. En faite quand aide petit prog c [ par mayapour ] Bonjour, Débutant en C, je souhaiterai savoir comment changer ce programme initiale (liste chainée) qui demande à l'utilisateur de choisir les optio pendu en c [ par scons ] bon jour, voila j'ai un probleme avec un programme en Cil s'agit du jeu du pendu.tout me semble pourtant corect mais je pense que je dois a voir un pr ReadFile et port USB [ par je_ne_viens_qu1_fois ] Bonjour à tousJ'aurai besoin d'une aide en toute urgence concernant le dialogue avec un microcontroller via le port USB.J'ai résussi à faire le "Creat affichage bizarre [ par darkwhite ] Salut a tousJe commence par faire une lotterie simple mais j'ai un probleme au niveau de l'affichage d'un tableau, mon code est le suivant#include #in


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.