begin process at 2012 02 12 17:48:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

mystère hexadécimal


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

mystère hexadécimal

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ée 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 aide pour realiser une repertoire telephonique en langage c [ par djamel000 ] Bonjour , je souhaiterai réaliser un répertoire téléphonique à accès sécurisé(cryptage des données par mot de passe)et recherche rapide de coordonnées printf char* [ par Flow8002 ] Bonjour , J'ai un petit soucis je n'arrive pas a imprimer un char *. je m'explique , j'ai un char *test qui contiens deux valeurs. test[0]=9; test[ Calculatrice [ par sarazin66 ] Voila ma calculatrice , je cherche pleins de critique pour l'améliorer =D [^^langue3] voici ma source: [code=cpp][/code]#include #include #include Appel d'un fichier d'entete [ par batoule80 ] Bonjour, je programme en c sous linux , il s'agit de résoudre une équation du second degrés. en premier lieu on insite l'utilisateur à saisir les coé WSAAsyncselect pour client TCP [ par daviid00 ] Bonjour, Je suis entrain de développer un client TCP qui se connecte de manière asynchrone à un serveur. Pour ce faire j'utilise la fonction WSAAsync Gestion dynamique de la mémoire [ par totolfpn ] Bonjour, j'apprends le C en autodidacte et je bloque sur strcmp et les pointeurs. Mon code marche bien sans pointeur, mais il y a un truc qui m'échapp liste de liste chainée [ par help26 ] je veux créer une liste (verticale) des noms et prenoms et villes et meme ces 3 elements representent un liste donc c'est une liste (horizontale) de l condition type char [ par Adict ] Bonjour voila j'ai un problème :p j'aime faire de petit programme pour m'entrainer et faire des challenges mais la je bloque [^^mad5] en gros j'aime


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,808 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales