Go Down

Topic: Additionner des char est ce possible ? (Read 1 time) previous topic - next topic

Jean-François

Jan 07, 2011, 10:40 pm Last Edit: Jan 07, 2011, 10:41 pm by jfs Reason: 1
J'aimerais pouvoir additionner des caractères ascii, ou leurs valeurs numériques et que la somme soit un char.

lorsque j'additionne :

CHAR 4 + 6  +  1  = ?
DEC  52 + 54 + 49 = 155

Est ce possible de faire une addition de la sorte et d'avoir un résultat en char ?
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

fdufnews

Le type char est un octet signé (contrairement au type byte qui est non signé) d'ailleurs si tu regardes la page de référence sur le type char http://arduino.cc/en/Reference/Char il est dit que l'on peut faire des opérations avec les char

Juste un petit bout de code pour montrer que cela fonctionne.

Code: [Select]

char toto1;
char toto2;

void setup(void)
{
 Serial.begin(19200);
}


void loop(void)
{
 char tata;
 
 toto1=34;
 toto2=56;
 tata=toto1+toto2;
 Serial.println(toto1,DEC);
 Serial.println(toto2,DEC);
 Serial.println(tata,DEC);
 delay(3000);
}

Luj06

#2
Jan 07, 2011, 11:29 pm Last Edit: Jan 07, 2011, 11:29 pm by julien@pobot.org Reason: 1
fdufnews a été plus rapide. Par contre je crois que ce que Jean-François veut faire, c'est ajouter les caractères sans les convertir en nombres, comme ça :

Code: [Select]

void setup()
{
 Serial.begin(9600);

 char total;  
 total = '4' + '6'+ '1';
 
 Serial.print(total);
}

void loop()
{
 
 
}

fdufnews

#3
Jan 08, 2011, 12:20 am Last Edit: Jan 08, 2011, 12:21 am by fdufnews Reason: 1
Quote
char toto= '4' + '6'  + '1';

L'opération additionne le code ASCII des 3 caractères.
Donc 52 + 54 + 49, ce qui donne -101 car le type char et signé.
si tu utilises des unsigned char (ou des byte)
Quote
unsigned char toto= '4' + '6'  + '1';

Tu retrouves 155.

Jean-François

Merci à vous pour les réponses.

Je m'aperçois que ce que j'aimerais obtenir n'est pas possible en char.

Il vaut mieux que je passe en hexadécimal.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

fdufnews


Jean-François

#6
Jan 08, 2011, 11:53 pm Last Edit: Jan 08, 2011, 11:55 pm by jfs Reason: 1
Je suis en train de faire un contrôle de redondance cyclique entre Arduino et Processing et le fait d'additionner des char m'aurait permis d'avoir une somme de contrôle moins "volumineuse",mais finalement  le résultat en hexa sera bien mieux.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

fdufnews

Tu veux faire le CRC des codes ASCII ou de la valeur qu'ils représentent?

Jean-François

#8
Jan 09, 2011, 09:06 pm Last Edit: Jan 09, 2011, 09:10 pm by jfs Reason: 1
Ce que je voulais contrôler c'est la somme d'un trame envoyée telle que :

$123,C,45.56343,6.76436,B,564,59340,2533#

je me disais que si je traitais cette chaine comme un tableau de char, je n'avais qu'a additionner chaque position du tableau pour avoir ma somme de contrôle, la différence dépassant les 127 serait convertie en un char supplémentaire, additionné au précédent.... (pas vraiment simple  ::))
En faisant comme cela je ferai passablement plus de calcul que si j'utilise la valeur hexa de chaque char.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

fdufnews

tu fais une boucle qui parcourt ton tableau et tu fais la somme dans un unsigned long.

quelque chose dans ce genre
Code: [Select]
unsigned long crc=0;

for (int index=0; index<strlen(chaine)-1; index++){
  crc+=(unsigned long)chaine[index];
}

Jean-François

#10
Jan 09, 2011, 11:23 pm Last Edit: Jan 09, 2011, 11:25 pm by jfs Reason: 1
C'est plus ou moins ce que j'ai fait, mais en hexadécimal, je n'ai pas de reste.

pour la longueur d'une string, c'est comme ça pour Arduino :

Code: [Select]
for(int a=0;a<thisString.length();a++){
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up