2octets --> 1 décimal

Résolu
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 10 août 2007 à 13:08
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 10 août 2007 à 15:29
    Bonjour,

Je cherche un moyen pour décrypter un buffer contennat des octets
j'arrive parfaitement a le faire octet apr octet mais je me retrouve dans un cas ou j'ai un nombre décimal codé sur 2 octets et je en sais pas comment m'y prendre

buffer[2] + buffer[3]--> int ?????
voici mon buffer :
BYTE buffer[50];

j'ai essayer en les additionant ou en faisant un sprintf mais ca ne me donne aps el bon résultat:
par exemple avec 021C ca devrait me donner dans mon entier 540...

quelqu'un peut m'aider ? SVP!

 

20 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 14:46
WORD r = (buffer[2]<<8)|buffer[3];

Si buffer[2] = 0x02 et buffer[3] = 1C, r sera egal à 0x021C -> 540

C++ (@++)<!--
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 août 2007 à 13:31
Je ne comprend pas tres bien ton pb
Tu cherche juste a additionner des caracteres?
Si c le cas ou est le pb?
BYTE buffer[] = "abc";
int Ret = buffer[0] + buffer[1];
Ret = 195
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 13:36
ben j'ai un buffer avec dans l'octet 1 : 02 et dans l'octet 2 : 1C
si je fais avec la calculatrice 21C --> en décimal : 540

si je fais comme toi il me donne 2+28=30 au lieu de 540 .... :s

 
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 août 2007 à 13:41
Je vois pas comment tu trouve 540, si avec calc je fait 02 + 1C ca me donne bien 1E (30)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 13:44
oui mais moi je veux les deux collés cad : 021C -->540
c'est bien la le pb

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 13:52
le truc ce n'est pas de faire octet par octet mais deux octets pour un décimal ....

je ne vois aps comment faire,perso

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 14:06
est ce possible au moins ? ton absence de reponse me fait flipper la ?? LOL

 
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 août 2007 à 14:07
Je pense que oui, je suis en train d'essayer quelque chose
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 14:09
super tu vas peut etre me sauver la vie

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 14:29
tu pense que l'on est obligé de coder ce que l'on ferait mentalement avec des puissances de 2 ???

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 14:52
génial ca marche,

tu peux juste me commenter cette ligne :
WORD r = (buffer[2]<<8)|buffer[3];
car j'avoue ne pas avoir l'habitude d'utiliser ce genre de syntaxe :-)

Merci BCP a vous deux pour votre aide

 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 15:04
<< et | sont des opérateurs binaire. Comme ça le dit, ils agissent au niveau binaire.
<< et >> sont des décalages de bits. Sert simplement à "tasser" à droite ou à gauche (suivant le sens des flèches) de x bit la valeur actuelle.
Exemple
int test = 0xAA; // 10101010
int r = test<<2; // On décale de 2 bits
r egalera donc 0x2A8 qui représente 1010101000 en binaire

| représente un OR. Sera mieux expliqué par un exemple:

int test = 0xAA // 10101010int r test|0xCC; // 0xCC 11001100
r egalera donc 0x88 qui représente 10001000

Il s'est passé en gros ceci:
10101010
11001100
-----------
10001000

Tu comprends ce qui ce passe ? Dans le cas contraire, ouvre un bouquin d'assembler. Rien de mieux pour comprendre ce genre de chose.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 15:08
Pardon, l'exemple de OR n'est pas bon. J'avais effectuer les calcules selon un AND.
Revoici l'exemple:

| représente un OR. Sera mieux expliqué par un exemple:

int test = 0xAA // 10101010int r test|0xCC; // 0xCC 11001100
r egalera donc 0xEE qui représente 11101110

Il s'est passé en gros ceci:
10101010
11001100
-----------
11101110

C++ (@++)<!--
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 15:09
yes j'ai capté , je te remercie pr ton aide et ton explication tres claire ....

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 15:14
juste un truc pour le AND et OR c'est bon mais le decalage de 8bits a gauche mo donne pour mon premier octet :

int test = 0x02;   //0000 0010
donc test<<8 donne 0000 0010 0000 0000 ???

pr le decalage je suis pas sur de bien comprendre et du coup pouvoir apres le maitriser ;-)

 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 15:15
T'as bien vue la correction que j'ai fais pour l'exemple du OR ?
Je pose la question car les posts ne sont distancés que d'une minute alors il est possible que tu n'est pas vue mon nouveau message avant de poster le tien.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 15:17
Oui c'est bien ça.

10 en binaire décalé de 8 bits donnera 10 0000 0000

C++ (@++)<!--
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 15:24
donc 1C (pr mon exemple precis)

donne 0001 1100 ?

donc le OR fera :
0000 0010 0000 0000
                  0001 1100
------------------------
0000 0010 0001 1100

et ca ca fait 540 ?
 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 août 2007 à 15:26
Exactement. Tu as tout compris.

C++ (@++)<!--
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
10 août 2007 à 15:29
normal quand on a un bon prof ;-)

Merci encore, pour le petit cours perso

 
0
Rejoignez-nous