Char en Int - C++ - Programmation
Marsh Posté le 27-03-2012 à 11:31:22
ben bitshifts dans ce cas ?
Si t'as char a = 0x01 et b = 0x28,
int c = a+(b>>8) ça le fait pas ?
(au passage, atoi() et strol() c'est chaine de caractère-> décimal, par exemple char*chaine = "128", int a = atoi(chaine) )
Marsh Posté le 30-03-2012 à 13:22:38
Terminapor a écrit : ben bitshifts dans ce cas ? |
(b>>8) == 0
Si on a bien l'entrée en hexa, qui indique un nombre en décimal, je pense que c'est plus un truc du genre
char strb[4];
sprintf(strb, "%x", b);
int result = 10*a + atoi(strb); // si a < 10, pas besoin de passer par un sprintf / atoi comme pour b
(faudra penser à tester que b est un nombre hexa ne comportant pas de lettres, atoi ne passera pas sinon)
edit: sinon si l'entrée et la sortie sont dans la meme base, le bitshift est la bonne solution
unsigned char a, b;
int c = (((int)a)<<8)+b;
Marsh Posté le 30-03-2012 à 13:41:57
Citation : La force du signal est traduite par 0x01 et 0x28, qui indique un signal de 128. |
BCD compacte, il n'y a pas de fonction standard pour decoder ca.
Code :
|
plus les verifications de validite qui vont bien.
Marsh Posté le 27-03-2012 à 11:01:58
Bonjour,
En communiquant avec une radio via une liaison série RS232, je reçois une trame qui m'envoie la force du signal reçu.
La trame se présente sous cette forme : 0xfe 0xfe 0xe0 0x6c 0x15 0x02 0x01 0x28 fd
La force du signal est traduite par 0x01 et 0x28, qui indique un signal de 128.
J'ai bien essayé le atoi() et strtol(), mais ça renvoie systématiquement 0.
Débutant en C/C++, je ne sais pas du tout comment je pourrais à partir de ces deux caractères, obtenir un entier.
Merci de votre aide !