Bonjour,

Voici un petit problème certainement simple pour certains, mais difficile pour moi.

Je dois décomposer un unsigned char, afin de pouvoir l'envoyer dans une file FIFO de 16 bits.


Je m'explique :
Soit le type U8 (unsigned char de 8 bits défini en printf précédemment).

Soit le nombre suivant : U8 nb_pommes = 132;
ou encore U8 nb_pommes = 0x84;


Et le tableau suivant : U8 buffer[15]; (tableau d'unsigned char de 8bits)

Mon but est de réaliser une fonction permettant de décomposer la valeur de nb_pommes : unité, dizaines, centaines... afin de les placer comme ceci
U8 buffer[0] = 1;
U8 buffer[1] = 3;
U8 buffer[2] = 2;

Voilà, j'ai un peu des soucis en ce qui concerne les types, les conversions en hexa etc...


Ma première idée est avec les modulo et les divisions par 10.
Cependant, l'inconvénient de cette méthode :

void arranger_pommes(U8 nb_pommes)
{
u8 temp = 0;
u8 compteur = 0;
while(nb_pommes > 9)
{
temp = nb_pommes % 10; // on récupère les unités
buffer[compteur] = temp;
compteur ++;
nb_pommes = nb_pommes/10; // on essaie de virer les unités
}
}

Voilà, outre le fait que ca n'a pas l'air de bien marcher (132/10 = 13.2 et on tomberait sur un nombre a virgule... ptetre que ca passe vu le type u8), cette méthode à l'inconvénient de placer mes éléments dans le mauvais ordre.

On obtiendrait :
U8 buffer[0] = 2; au lieu de 1
U8 buffer[1] = 3;
U8 buffer[2] = 1; au lieu de 2
Il faudrait alors réinver les éléments du tableau.

Quelqu'un a t'il une meilleure méthode ?

Pour info, cette fonction me sert a envoyer des données vers un HyperTerminal via une UART et donc de faire l'équivalent d'un print.
J'ai donc très peu de moyens de vérifier ce que je fais.

Merci beaucoup