Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2896 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Char en Int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Char en Int

n°2133156
Nao13090
Posté le 27-03-2012 à 11:01:58  profilanswer
 

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 !

mood
Publicité
Posté le 27-03-2012 à 11:01:58  profilanswer
 

n°2133175
Terminapor
I'll see you rise.
Posté le 27-03-2012 à 11:31:22  profilanswer
 

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) )

Message cité 1 fois
Message édité par Terminapor le 27-03-2012 à 11:32:23

---------------
Perhaps you don't deserve to breathe
n°2133885
Iradrille
Posté le 30-03-2012 à 13:22:38  profilanswer
 

Terminapor a écrit :

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) )


(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;


Message édité par Iradrille le 30-03-2012 à 13:26:50
n°2133888
Un Program​meur
Posté le 30-03-2012 à 13:41:57  profilanswer
 

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 :
  1. v = (a[0] >> 4 & 0x0F) * 1000 + (a[0] & 0x0F) * 100 + (a[1] >> 4 & 0x0F)*10 + (a[1] & 0x0F);


 
plus les verifications de validite qui vont bien.
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Char en Int

 

Sujets relatifs
Déclaration de tableau de charQuestion sur le "type", INT, Char... ?
Conversion char en int, float et double[C] Probleme de conversion char -> int
Convertir : (char *) -> (int *) [C ANSI]transformer un char* en int
[ SQL ] Convertir une chaine de char en int -> Convert ?code postal stocké en CHAR ou INT ?
[VC++6.0] Comment on fait pour convertir des INT an CHAR *[C++]Transformer un INT en CHAR, un nombre en une chaine de char,quoi
Plus de sujets relatifs à : Char en Int


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR