[RESOLU] byte Array to char [ASCII]

Bonjour,

Comme indiqué dans le titre je souhaite faire une conversion. Je m'explique:

J'ai un tableau de 10 données:

byte Array[9]

Chaque "colone" contient un numéro de 0 à 9. Donc 10 digits allant de 0 à 9 qui me donnent un numéro de téléphone, par exemple: 0329415376 ou précisément {0, 3, 2, 9, 4, 1, 5, 3, 7, 6}

Avec sa j'ai une variable char

char numero[10]

Elle contient n+1 donnée pour la terminaison "0".

Je veux pouvoir faire Serial.print(numero) et indiquer le numéro complet (les 10 digits). Il faut que chaque digit soit converti dans sa valeur de la charte ASCII correspondante?!

Si je mets simplement la valeur décimal je n'obtiens que des caractères vide.
exemple:
n=0-9
numero[n] = Array[n]

Sa fait des heures que je coince la dessus, j'ai fouillé tout le net à la recherche de la solution mais je n'ai pas trouvé de réponse clair >:(

J'ai besoin du char pour une fonction d'un module externe...

Pouvez vous m'écrire un code qui effectuerais cette tâche? Mille merci!

Bonjour,

Un petit indice : regarde une table ASCII et la valeur du caractère représentant le chiffre zéro :wink:

Merci,

Enfaite j'avais fait un truk comme sa pour finir:

byte Array[9];
char numero[10];

void convert(){
  for(a=0;a>9;){
    if(Array[a]==0){
      numero[a]==valeurASCII_0;
    }
    etc.
    a++;
  }
  numero[10]='\0';
}

Sa n'a pas marché sur le coup et j'ai jeté l'éponge... et je voulais un truk "compacte"...

Un code??? :slight_smile:

Bonjour,

Ganjouille:
J'ai un tableau de 10 données:

byte Array[9]

Non ça c'est un tableau de neuf données. Il faut byte Array[10];

Ensuite la conversion decimale ASCII est très simple. Sachant que les codes ASCII des chiffres se suivent, il suffit d'ajouter le code ASCII de '0'

numero[n] = Array[n]+'0'

tu peux convertir ton tableau de chiffres en tableau de caractères comme le dit kamill, en ajoutant 48 (ou '0') qui correspond au code ASCII du chiffre 0. Un truc du genre :

byte Array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
char numero[11];

for(int i=0; i<10; i++)  // dans ton code t'avais mis "a>9", ce qui à mon humble avis est une erreur
{
    numero[i] = Array[i] + 48;  // conversion "directe"
}

numero[10] = '\0';  // ne pas oublier de "terminer" la chaine sinon ca ne va faire que planter

Serial.print(numero);  // et t'envoies le numéro dans ton lien série

Sinon, si tu veux faire plus court et qui marche tout aussi bien, tu peux tout aussi bien écrire chiffre par chiffre dans ton lien série :

byte Array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
 
for(int i=0; i<10; i++)  //comme avant
{
    Serial.print((int)(Array[i]));  // envoi direct : le "cast" (conversion) en int c'est pour s'assurer que print ne prend pas ta valeur pour un caractère/code ASCII.
}

Non ça c'est un tableau de neuf données.

Juste! Merci, sa porte vraiment à confusion l'indexation à 0... J'ai fais juste dans mon programme.

Sa marche!!! Ouf... je désespérais. Tout bête en fin de compte! Merci pour les précisions.

for(a=0;a>9;){
if(Array[a]==0){
numero[a]==valeurASCII_0;
}
etc.
a++;
}

Ca risque pas de marcher
for (a=0; a>9;)
a est initialisé à 0
la condition de validité de la boucle est : a supérieur à 9
donc tu passes jamais dans la boucle

ensuite
numero[a]==valeurASCII_0; est interprété comme un test par le compilateur donc tu n'affectes aucune valeur à numero[a]

Ca risque pas de marcher

J'ai fait sa à la va vite... pour illustrer. Assez mauvais j'avoue...

passes jamais dans la boucle

Lorsque la boucle aura été repeté 10x la condition est remplie.

Petite question supplémentaire, Zorro_X.

Dans ta deuxième version tu ne mets pas de terminaison, pourquoi?

La deuxième version est plus courte mais moins performante que la première (de peu), je ne mets pas de '\0' parce que c'est print qui s'en charge (à chaque fois en plus) tout seul comme un grand... :wink:

Merci, je m'en doutais un peu...

Voilà la partie de code concernant la question, fonctionnel:

/********************** Envoi Appel **********************/
void sendCall(){
  convert();
  printByteArray();
  Serial.print(F("Calling ")); Serial.println(numero);
        if (!fona.callPhone(numero)) {
          Serial.println(F("Failed"));
        } else {
          Serial.println(F("Sent!"));
        }
}

void convert(){
  for(int i=0; i<10; i++){
    numero[i] = dialArray[i] +'0';
    }
  numero[10] = '\0';
  Serial.print("ascii:");Serial.println(numero);
}

void printByteArray(){
  Serial.println();
  Serial.print("Appel:");
  for (int a=0;a<10;a=a+1){
    nEssai=0;
    if(a==3){
      Serial.print(" ");        
    } 
    if(a==6){
      Serial.print(" ");
    }
    if(a==8){
      Serial.print(" ");
    }
    Serial.print(dialArray[a]);
  }
  Serial.println();
}