Convertit format hex en string

Bonsoir,
Je cherche à “reconvertir” ma chaine de caractères en réception RX1 (devenue binaire ou hexa), en string pour l’afficher sur mon TFT.
Mon essai:

String test = (80,HEX)); //(exemple pour afficher “P”)
myGLCD.print(test,600,100);

Pouvez vous me conseiller?
Merci

Bonjour,
Va voir par là : http://arduino.cc/en/Serial/Print?from=Reference.PrintHex
Tu peux également faire une recherche dans arduino.cc ou playground.arduino.cc
Bonne chasse
@+

Bonjour,

Pourquoi toujours mettre des String partout ...
Un tableau de char et sprintf() avec l'argument %x c'est largement suffisant :wink:

Je me suis mal expliqué;
J’utilise la librairie GLCD pour afficher sur mon TFT et non sur le PC. Donc print et printf ne fonctionnent pas.La fonction “myGLCD.print(test,600,100)” attend une constante de type char.
myGLCD.print(“P”,600,100) ----> OK
myGLCD.print((80, BYTE),600,100) ne fonctionne pas (“P”----> 80 en hexa) .

Hello,

Passe par un tampon mémoire, et utilise snprintf, ou, en C++ un stringstream et l’opérateur std::hex()

Je "viens" de l'assembleur sur freescale(68hc11) puis sur ATmega64A, donc je découvre le langage arduino; peux tu m'expliquer avec un exemple ?

Merci

L’arduino se programme en C++ standard, et toutes les fonctions standard de C++ ainsi que la plupart de “libc” sont implémentées.

char *input; // ton tampon d'entrée

char buf[2*data_size + 1];
char *ptr = buf;
char *in = input,
for (int i = 0; i < data_size; i++)
{
  sprintf(ptr, "%02x", in++)
  ptr += 2;
}
*ptr = 0;

en assembleur ou en C de plus bas niveau, tu peux aussi faire ceci :

  • prendre un caractère c à la fois
  • afficher ‘0’ + c >> 4
  • afficher ‘0’ + c & 0xF

"P"----> 80 en hexa

Non "P" c'est un tableau de char contenant 2 caractères: 'P' et '\0'

Je cherche à "reconvertir" ma chaine de caractères en réception RX1 (devenue binaire ou hexa), en string pour l'afficher sur mon TFT.

Je ne comprends pas qu'est-ce que tu veux convertir... Pourquoi tu dis que ta chaine de caractère est devenue binaire ou hexa?

Quand tu lis un caractère avec Serial.read, le caractère n'est pas transformé en binaire ou en hex puisque ce ne sont que des moyens de représenter un même nombre.

Si tu veux transformer un caractère en string, tu dois tout simplement mettre le caractère dans un tableau de char terminé par un '\0'.

char str[2];
str[0] = Serial.read();
str[1] = '\0';
myGLCD.print( str );

Merci pour ces infos :).
Deuxième étape; parser une trame de la forme <;char;byte;byte;byte;>
Dois je ouvrir un nouveau sujet ?

byte = char, donc pas de souci

XavierMiller:
byte = char, donc pas de souci

Non, byte = unsigned char

HC11F1ST:
Deuxième étape; parser une trame de la forme <;char;byte;byte;byte;>

Avec sscanf c’est simple, exemple: http://ideone.com/CREFHI
Liste des paramètres: printf - C++ Reference

Ouais, enfin, la taille en octets est la même :wink:

Pour lire un caractère, c'est getchar(), ou fgetc()

HC11F1ST:
Deuxième étape; parser une trame de la forme <;char;byte;byte;byte;>

Plutôt qu’un parser il serait sans doute préférable de traiter les informations au fur et à mesure de leur réception à l’aide d’une petite machine à état.

HC11F1ST:
Deuxième étape; parser une trame de la forme <;char;byte;byte;byte;>

Serial.read() en boucle, ou de manière plus “Arduino” :

Exemple un poil plus complexe (bas niveau) :

fdufnews:
Plutôt qu’un parser il serait sans doute préférable de traiter les informations au fur et à mesure de leur réception à l’aide d’une petite machine à état.

Je plussoie, ce serait la “bonne” façon de faire.
Voir le topic de Barbudor sur l’implémentation d’un protocole de communication pour connaitre la marche à suivre :wink: