|
Trouver une ressource
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)
Informations & options pour cette discussion
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
|
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
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|