est ce quelquen peut m' aider de transformer un int en decimal et placer les valeurs dans un buffer . ex si j'ai 123F comment faire pour transformer en dec en C
-----
06/03/2008, 04h34
#2
invite9d3f5cd9
Date d'inscription
janvier 1970
Messages
167
Re : hex en dec en C
Je te propose un algorithme qui n'est pas nécessairement optimisé.
a) on divise la nombre par 10 000 pour connaitre so on 0, 1. 2. ou 3 dizaines de
milliers. Si on veut le caractère ASCII, on fait un OU avec 0x30
b) On prend le reste de la division par 10 000 qu'on divise par 1000 et le résultat est le nombre de milliers.
c) On prend ensuite le reste de la division par 1000 fait en b qu'on divise par 100 pour obtenir le nombre de centaines.
Et ainsi de suite jusqu'aux unités.
Espérant le tout à ta satisfaction.
06/03/2008, 10h52
#3
Seb.26
Date d'inscription
juin 2005
Localisation
Rhône-Alpes
Âge
48
Messages
2 983
Re : hex en dec en C
Ton int est en hexa ou en decimal ?
Tu veux quoi comme "buffer" ?
Une chaine de caractères ?
Quel est la taille de ton int ? ( 8b ? 16b ? 32b ? )
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
06/03/2008, 11h32
#4
invite936c567e
Date d'inscription
janvier 1970
Messages
12 143
Re : hex en dec en C
Bonjour
Envoyé par sdow
si j'ai 123F comment faire pour transformer en dec en C
J'imagine qu'on part du principe que la valeur à convertir tient sur 16 bits.
La solution de principe a donc été donnée au-dessus par xouiram.
Après, on peut optimiser en fonction du type de processeur utilisé, notamment s'il ne dispose pas de la division. Dans ce cas, ça peut donner quelque chose comme ceci :
Code:
// Sous-fonction:
// Conversion d'un seul chiffre décimal
// En sortie, *p_hval contient le reste non converti
char conv1digit(unsigned int *p_hval, int div)
{
char digit=0x30; // Initialisation à "0" en ASCII
// Division de hval par div
// sans utiliser d'opération de division
while( div < *p_hval ) {
*p_hval -= div;
digit++;
}
return digit;
}
// Fonction principale:
// Conversion d'un entier non signé en nombre décimal ASCII
void hex2dec(unsigned int hval, char dval[6])
{
dval[0] = conv1digit( &hval, 10000 );
dval[1] = conv1digit( &hval, 1000 );
dval[2] = conv1digit( &hval, 100 );
dval[3] = conv1digit( &hval, 10 );
dval[4] = (char)hval;
dval[5] = 0; // caractère nul de fin de chaîne
}
Ça peut être encore amélioré, notamment en supprimant les zéros non significatifs ou en les remplaçant par des espaces, ou en traitant les valeurs signées, selon ce que l'on désire obtenir.
Aujourd'hui
A voir en vidéo sur Futura
06/03/2008, 12h05
#5
Seb.26
Date d'inscription
juin 2005
Localisation
Rhône-Alpes
Âge
48
Messages
2 983
Re : hex en dec en C
Code:
int hex_value;
char[6] str_out; // [6] si int=16b signé, [11] si 32b
sprintf( str_out, "%d", hex_value );
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
06/03/2008, 16h47
#6
Jack
Modérateur
Date d'inscription
avril 2003
Localisation
Metz
Messages
17 788
Re : hex en dec en C
Envoyé par sdow
salut
est ce quelquen peut m' aider de transformer un int en decimal et placer les valeurs dans un buffer . ex si j'ai 123F comment faire pour transformer en dec en C
Ca veut dire quoi décimal? BCD? Sinon la question n'a pas de sens. Un int est un int, et vaut une certaine valeur, qu'elle soit exprimée en hexa, en binaire ou en hexadécimal.
Il faudrait un exemple avec la valeur de départ et ce qu'on doit trouver à la sortie.
A+
06/03/2008, 18h00
#7
invite936c567e
Date d'inscription
janvier 1970
Messages
12 143
Re : hex en dec en C
Envoyé par Seb.26
Code:
int hex_value;
char[6] str_out; // [6] si int=16b signé, [11] si 32b
sprintf( str_out, "%d", hex_value );
Attention : le format "%d" utilise un caractère supplémentaire (un signe "moins" pour les nombres négatifs ou un espace pour les nombres positifs). Il faut donc prévoir un tableau de 7 caractères pour un entier sur 16 bits et un tableau de 12 caractères pour un entier sur 32 bits.
Ne pas oublier d'inclure le fichier de déclaration stdio.h au source et de lier la librairie standard (qui fait tout le travail).
06/03/2008, 18h06
#8
invite936c567e
Date d'inscription
janvier 1970
Messages
12 143
Re : hex en dec en C
Bon, sdow, tout ça ce sont des exemples faits sur la base de suppositions.
Le plus sage serait quand même d'attendre ta réponse aux questions de Seb.26 (post #3) et de Jack (post #6).