Pb : Stockage char > 255.

Résolu
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 26 mai 2009 à 18:05
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 27 mai 2009 à 08:21
Bonjour a tous,


J'ai un souci concernant le stockage d'un nombre > 255 voici mon problème :


J'ai créer une appli pc qui contient un slider contrôle. Ce slider contrôle varie de -1000 à +1000.
Je souhaite récuperer la valeur du curseur et la stocker dans deux char pour la renvoyer sur le bus CAN.


Pour info voici mon code :


int z;
void CSimulationDlg::OnNMCustomdrawSlider3(NMHDR *pNMHDR, LRESULT *pResult)  

 LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
 CSliderCtrl *pSlider3=static_cast<CSliderCtrl *>(GetDlgItem(IDC_SLIDER3));

 z = pSlider3->GetPos();
 pSlider3->SetRange(0,2000);
 pSlider3->SetPos(1000);

 *pResult = 0;
}


Merci pour les propositions.


Cordialement
Romain

2 réponses

cs_beg0 Messages postés 51 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 13 mars 2011 1
26 mai 2009 à 18:51
Salut
Pas sur d'avoir compris ton probleme. Dit moi si c'est ce que tu cherchais

Soit Entier une variable de type short (16 bits) et c1,et c2 deux variables de types char (soit 8 bits)
int Entier;
char c1,c2;

Si j'ai bien compris tu veux stocker les 16bits de Entier dans  c1 etc2?

pour se faire, il faut utiliser les opérations bit a bitc1Entier >> 8 ; /* si ton compilateur se plaint, écris c1  (Entier >>8) & 0xFF; */
c2 = Entier & 0xFF;

ou c1 contiendra les 8 bits de poids forts de Entier et c2 contiendra 8 bits de poids faibles de Entier.

Une formule un peu plus générale pour stocker une variable de n'importe quelle taille dans n char

int64_t variable_a_stocker; /*remplace int64_t par la valeur que tu veux */
/*travail sur variable_a_stocker*/

char c[sizeof(variable_a_stocker)/sizeof(char)];

for(int i=0 ; i< sizeof(variable_a_stocker)/sizeof(char) ; i++)
c[i]=variable_a_stocker>>(8*i) & 0xFF;

/*c[0] contient les bits de poids faibles, c[7] contient les bits de poids forts de variable_a_stocker */

avec une petite adaptation mineure on peut aussi stocker ca dans autre chose que des char... je te laisse experimenter si tu veux.

Si j'ai repondu a cote de la plaque, desole, mais j'ai pas compris ce que tu voulais... :(
3
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
27 mai 2009 à 08:21
Bonjour,

Vous avez bien compris ma demande, votre solution est claire et précise !

Grand merci et a bientôt.

Cordialement

Romain
0
Rejoignez-nous