Pages: [1]   Go Down
Author Topic: Additionner des char est ce possible ?  (Read 1350 times)
0 Members and 1 Guest are viewing this topic.
Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
« Last Edit: January 07, 2011, 04:41:14 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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);
}
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
void setup()
{
  Serial.begin(9600);

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

void loop()
{
  
  
}
« Last Edit: January 07, 2011, 05:29:52 pm by julien@pobot.org » Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: January 07, 2011, 06:21:27 pm by fdufnews » Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais qu'est-ce que tu veux faire?
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: January 08, 2011, 05:55:58 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  :smiley)
En faisant comme cela je ferai passablement plus de calcul que si j'utilise la valeur hexa de chaque char.
« Last Edit: January 09, 2011, 03:10:59 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
for(int a=0;a<thisString.length();a++){
« Last Edit: January 09, 2011, 05:25:30 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Pages: [1]   Go Up
Jump to: