La c'était un cas simple, donc les "astuces mathématiques" fonctionne bien. Maintenant si tu dois splitter 2654.564594.4488.4962 les ça sera pas la même chose
Oui, je comprend, pour l'instant je cherche juste à aller à l'essentiel et la simplicité.
J'ai une autre question, j'ai une string en binaire que j'aimerai convertir en int. Vois-tu des fonctions existantes qui permettent des opérations de conversion sur les string ?
Exemple
String generate_AIS(String trame_bin){
char *LUT="0123456789:;<=>?@ABCDEFGIJKLMNOPQRSTUVW`abcdefghijklmnopqrtstuvw";
int n = 0;
// int index;
char temp_char;
String temp_string;
for (n=0;n<27;n++){
temp_string = trame_bin.substring(( n*6),((n*6)+6));
Serial3.println(temp_string);
String index = String(temp_string,DEC);
Serial3.println(index);
temp_char = LUT[index];
Serial3.println(temp_char);
}
// return temp_string;
}
J'ai en entrée ma chaine binaire, et je voudrais tout les 6 bits sortir le caractère correspondant dans ma LUT. Mais la conversion de l'temp_string a mon index n'est pas possible, penses-tu qu'un toInt() pourrais marcher, ou alors d'abord convertir la string en un array de char puis utiliser atoi() ?
Oula j'ai pas tout pigé ... Par exemple si je prends ta chaîne dans ton code :
"0123456789:;<=>?@ABCDEFGIJKLMNOPQRSTUVW`abcdefghijklmnopqrtstuvw"
Et que tu reçois 3, 11, et 18, tu veux obtenir une chaine : "2:A" ?
Non pas tout à fait, en fait je découpe ma chaine binaire tout les 6 bits, j'obtiens par exemple 001101, et je veux récupérer la valeur correspondante a LUT[13], "<".
Ensuite je concetane toutes les symbole en une trame qui me donnera la trame AIS. Suis-je clair ??
[Edit] Oui enfin tu as compris le principe sauf que je recois une valeur binaire que je n'arrive pas a convertir en décimale, sachant que cette valeur binaire est comprise dans une string ou un tableau de char.
Perso j'aurais fait ça : récupérer la position du point avec strpos, puis lire les (strpos - 1) caractères de gauche, puis les (len - strpos) caractères de droite. Si c'est un tableau de char, on peut facilement décaler le contenu en écrasant le tableau sur lui-même (il aura 2 zéros terminaux, c'est pas trop grave).
Oui du coup j'ai utilisé la fonction substring pour isoler les 2 parties puis un strcat ensuite.
Sur le coup pour traduire ma string binaire j'ai essayer de monter une petite boucle pour calculer ça mathematiquement parlant:
String generate_AIS(String trame_bin){
char *LUT="0123456789:;<=>?@ABCDEFGIJKLMNOPQRSTUVW`abcdefghijklmnopqrtstuvw"; //table de correspondance
char temp_char_bin[7];
int n = 0;
int o;
int index = 0;
char temp_char;
String temp_string;
for (n=0;n<27;n++){
temp_string = trame_bin.substring(( n*6),((n*6)+6)); //prend 6bits par 6bits
temp_string.toCharArray(temp_char_bin,7); //transforme la string en tableau de char
for (o = 5;o >=0;o--){ // calcul de l'index
index = index + (temp_char_bin[o]*bit(o));
}
temp_char = LUT[index]; //récupération du symbol par rapport a la valeur des 6 bits
index = 0;
Serial3.println(temp_char);
}
// return temp_string;
}
Bizzarement le (temp_char_bin[o]*bit(o)) me donne la bonne valeur *48...
Oui, j'ai trafiquer un peu ça, ne m'en voulez pas cest mon tout premier programme, cela ne doit pas être beau a voir :*
char* generate_AIS(String trame_bin){
char *LUT="0123456789:;<=>?@ABCDEFGIJKLMNOPQRSTUVW`abcdefghijklmnopqrtstuvw"; //table de correspondance
char temp_char_bin[7]; //
int n = 0;
int o;
long int index = 0;
char temp_char;
String temp_string;
char final_string[27];
strcpy (final_string, "1");
for (n=0;n<27;n++){
temp_string = trame_bin.substring(( n*6),((n*6)+6)); //prend 6bits par 6bits
temp_string.toCharArray(temp_char_bin,7); //transforme la string en tableau de char
for (o = 5;o>=0;o--){
index = index + (((temp_char_bin[o]-48)*bit(abs(o-5))));
}
final_string[n] = LUT[index];
index = 0;
}
final_string[27] = 0;
// Serial3.println(final_string);
return (final_string);
}