Affichage printf (valeur hexa) étrange :S
Fermé
Neptis
-
23 févr. 2008 à 19:29
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 30 juil. 2008 à 11:05
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 30 juil. 2008 à 11:05
A voir également:
- Printf hexa
- Editeur hexa - Télécharger - Édition & Programmation
- Table ascii hexa - Guide
- Code hexa transparent - Forum Webmastering
- Undefined reference to printf ✓ - Forum Programmation
- Probleme avec printf() ??? - Forum C
4 réponses
mich62120
Messages postés
631
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 janvier 2010
6
23 févr. 2008 à 20:10
23 févr. 2008 à 20:10
Et si t'initialise somme=0x000;?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 juil. 2008 à 10:40
30 juil. 2008 à 10:40
Moi, je sais !! Tu ne sais tout simplement pas faire une addition.
100-(2+20+80+80)=100-122 <0 !
Test avec la calculatrice windows en mode hexadécimal pour t'en convaincre !
FloMo, ta solution est... sans intéret, en forçant le résultat, c'est évident que tu va l'avoir.
100-(2+20+80+80)=100-122 <0 !
Test avec la calculatrice windows en mode hexadécimal pour t'en convaincre !
FloMo, ta solution est... sans intéret, en forçant le résultat, c'est évident que tu va l'avoir.
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
30 juil. 2008 à 11:05
30 juil. 2008 à 11:05
Bonjour,
En fait, 0xFFFFFFDE est un nombre négatif. (Qui provient du 0x100 - <plein de trucs>)
n = 0xFFFFFFDE
n - 1 = 0xFFFFFFDD
C1( n - 1) = 0x22 // = ~0xFFFFFFDD
n = -34
Comme ici on considère des nombres non signés on peut voir ça comme un tour de compteur :
0 = 0x00000000
0 - 1 = 0xFFFFFFFF // (Sur un entier 32 bits) on va dire 0xFF...FF
0 - 2 = 0xFFFFFFFE
etc.
De la même façon, 0xFFFFFFFF + 1 = 0 car sur un entier 32 bits, on dépasse le maximum possible.
taille=0x02;
code=0x20;
donnee[0]=0x80;
donnee[1]=0x80;
donc : pleinDeTruc = 0x122;
D'où 0x100 - 0x122 = - 0x22 = 0xFFFFFFDE.
Je soutiens la solution proposée par FloMo qui permet d'obtenir l'affichage désiré.
C'est l'opération elle même qui n'est pas délicate. (ce qui ne veut pas dire que ce n'est pas celle que tu souhaites)
Pour un checksum léger ça peut être satisfaisant.
Ceci dit, le seul souci que je vois ici est dans :
(Avec ce programme j'obtiens : ffffffDE alors que je devrais obtenir : DE ).
256 - 290 = -34
0xDE = 222
Voilou,
M.
EDIT. : Ah bah oui, quand on fait deux choses en même temps répond en retard...
En fait, 0xFFFFFFDE est un nombre négatif. (Qui provient du 0x100 - <plein de trucs>)
n = 0xFFFFFFDE
n - 1 = 0xFFFFFFDD
C1( n - 1) = 0x22 // = ~0xFFFFFFDD
n = -34
Comme ici on considère des nombres non signés on peut voir ça comme un tour de compteur :
0 = 0x00000000
0 - 1 = 0xFFFFFFFF // (Sur un entier 32 bits) on va dire 0xFF...FF
0 - 2 = 0xFFFFFFFE
etc.
De la même façon, 0xFFFFFFFF + 1 = 0 car sur un entier 32 bits, on dépasse le maximum possible.
taille=0x02;
code=0x20;
donnee[0]=0x80;
donnee[1]=0x80;
donc : pleinDeTruc = 0x122;
D'où 0x100 - 0x122 = - 0x22 = 0xFFFFFFDE.
Je soutiens la solution proposée par FloMo qui permet d'obtenir l'affichage désiré.
printf("%x\n", 0xff & somme);
C'est l'opération elle même qui n'est pas délicate. (ce qui ne veut pas dire que ce n'est pas celle que tu souhaites)
Pour un checksum léger ça peut être satisfaisant.
Ceci dit, le seul souci que je vois ici est dans :
(Avec ce programme j'obtiens : ffffffDE alors que je devrais obtenir : DE ).
256 - 290 = -34
0xDE = 222
Voilou,
M.
EDIT. : Ah bah oui, quand on fait deux choses en même temps répond en retard...
23 févr. 2008 à 20:13