Convertir un int en char
quent
-
Sugel Messages postés 4076 Date d'inscription Statut Membre Dernière intervention -
Sugel Messages postés 4076 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je viens de commencer a programmer des add-in pour casio en c.
la fonction permettant d'afficher du text est la suivante :
void Print(const unsigned char *str)
dans les examples que j'ai trouvé il y a par example :
Print((unsigned char*)"du texte ...");
et ca marche bien.
j'aimerais savoir si il est possible de convertir un int dans ce type pour afficher un nombre.
j'ai essayer d'utiliser :
int nombre=5;
Print((unsigned char*) nombre);
mais ca ne marche pas.
merci d'avance pour votre aide
PS : je suis encore débutant en c
je viens de commencer a programmer des add-in pour casio en c.
la fonction permettant d'afficher du text est la suivante :
void Print(const unsigned char *str)
dans les examples que j'ai trouvé il y a par example :
Print((unsigned char*)"du texte ...");
et ca marche bien.
j'aimerais savoir si il est possible de convertir un int dans ce type pour afficher un nombre.
j'ai essayer d'utiliser :
int nombre=5;
Print((unsigned char*) nombre);
mais ca ne marche pas.
merci d'avance pour votre aide
PS : je suis encore débutant en c
A voir également:
- Convertir char en int c
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Convertir epub en kindle - Guide
- Convertir youtube en mp3 avec audacity - Guide
- Convertir kindle en epub - Guide
- Convertir audio en texte word - Guide
8 réponses
Bonjour,
Tu peux par exemple passer par une chaîne.
Par exemple :
Après, faut voir quelles sont les fonctions autorisées en C sur ta casio.
Tu peux par exemple passer par une chaîne.
Par exemple :
char chaine[TAILLE]; sprintf(chaine, "%d", nombre); Print(chaine);
Après, faut voir quelles sont les fonctions autorisées en C sur ta casio.
Bonjour,
j'ai fait comme tu m'as dis :
mais ca ne marche pas. il n'y as pas d'erreur a la compilation mais lorsque le code passe a la ligne
il ne met pas la bonne valeur dans chaine et a la ligne
il n'affiche rien.
j'ai tester avec nombre=1 donc le probleme ne viens pas de la taille de chaine.
j'ai fait comme tu m'as dis :
char chaine[10]; sprintf(chaine, "%d", nombre); Print(chaine);
mais ca ne marche pas. il n'y as pas d'erreur a la compilation mais lorsque le code passe a la ligne
sprintf(chaine, "%d", nombre);
il ne met pas la bonne valeur dans chaine et a la ligne
Print(chaine);
il n'affiche rien.
j'ai tester avec nombre=1 donc le probleme ne viens pas de la taille de chaine.
Comment tu sais qu'il ne met pas la bonne valeur dans "chaine" ?
Sinon, le code que je t'ai donné (hormis le Print(), en C on utiliserait plutôt printf("%s_n", chaine); ou simplement puts(chaine)), fonctionne.
Si ça ne marche pas, c'est plutôt du côté de Casio qu'il faut regarder. Je ne connais pas Casio...
Google is your friend
Sinon, le code que je t'ai donné (hormis le Print(), en C on utiliserait plutôt printf("%s_n", chaine); ou simplement puts(chaine)), fonctionne.
Si ça ne marche pas, c'est plutôt du côté de Casio qu'il faut regarder. Je ne connais pas Casio...
Google is your friend
yop !
si printf n'existe pas, à mon avis sprintf n'existe pas non plus...
EDIT:
non en fait, d'après la doc casio (https://www.planet-casio.com/files/logiciels/Manuels_sdk_fx9860_g75_85_95.zip sprintf est bien supporté, de même que sscanf...
leur prototype:
si printf n'existe pas, à mon avis sprintf n'existe pas non plus...
EDIT:
non en fait, d'après la doc casio (https://www.planet-casio.com/files/logiciels/Manuels_sdk_fx9860_g75_85_95.zip sprintf est bien supporté, de même que sscanf...
leur prototype:
int sprintf(char *s, const char *control[, arg ...])
Je sais qu'il ne met pas la bonne valeur dans chaine car j'ai regarder sa valeur avec le débogueur et printf ne marche pas sur casio. je vais essayer de chercher sur des sites spécifiques a casio mais merci quand meme.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu peut toujours essayer de faire toi même une fonction de conversion entier vers chaîne, c'est intéressant à coder et résoudrait ton problème;
Par exemple, une boucle do while qui boucle tant que le nombre a tester est supérieur a dix, et qui dans un premier temps, calcule le modulo de ce nombre par 10, le convertit en ASCII et le stocke dans un coin avant de le soustraire au nombre à tester, puis de diviser celui-ci par dix.
Tu devrait obtenir le nombre à l'envers, et il suffit alors de l'afficher à rebours.
C'est une méthode parmis bien d'autres, sûrement pas la plus facile ni la plus optimisée.
Tu devrait obtenir le nombre à l'envers, et il suffit alors de l'afficher à rebours.
C'est une méthode parmis bien d'autres, sûrement pas la plus facile ni la plus optimisée.
Une fonction toute faite trouvée ici, que j'ai commentée, qui permet de convertir un entier en chaine de caractère.
Elle n'est pas parfaite, bien sur, mais devrait convenir...
#include <stdio.h> // la fonction a pour argument le nombre à convertir et un pointeur vers une chaine "vide" char* itoa(int i, char b[]){ char* p = b; //on crée un pointeur vers la chaine en question if(i<0){ // si le nombre est négatif... *p++ = '-'; // alors le premier élément de la chaine est un moins i *= -1; // et on prends l'opposé du nombre. } /* cette variable et la boucle qui suis a pour but de se déplacer à la fin de la représentation du nombre dans la chaine de caractère. */ int shifter = i; do{ ++p; shifter = shifter/10; }while(shifter); // on définis le caratère de fin de chaine *p = '\0'; do{ //et on recule dans la chaine, en convertissant au fur et à mesure /* 30 est la position de zéro dans la table ascii. i%10 permets de prendre le reste de la division euclidienne de i par 10, soit en fait le premier chiffre du nombre.*/ *--p = 30 + i%10; i = i/10; // on divise par 10, ce qui reviens à supprimer le premier chiffre. }
Elle n'est pas parfaite, bien sur, mais devrait convenir...
Bonjour,
le langage de programmation C, est un langage qui manipule essentiellement les adresses donc un langage bas niveau.
Quand bien même, la façon d'écrire votre fonction qui attend un tableau en argument, le langage C le transforme automatiquement en pointeur sur le premier élément du tableau donc, en peut très bien écrire directement
elle est identique à écriture de la fonction poster plus haut mais, il faut comprendre que dans les deux cas on passe l'adresse du tableau à la fonction, en clair on travaille toujours sur l'original et non une copie de celle-ci.
à bientôt
le langage de programmation C, est un langage qui manipule essentiellement les adresses donc un langage bas niveau.
Quand bien même, la façon d'écrire votre fonction qui attend un tableau en argument, le langage C le transforme automatiquement en pointeur sur le premier élément du tableau donc, en peut très bien écrire directement
int f_MyFunc(int * iTab);
elle est identique à écriture de la fonction poster plus haut mais, il faut comprendre que dans les deux cas on passe l'adresse du tableau à la fonction, en clair on travaille toujours sur l'original et non une copie de celle-ci.
à bientôt
Bonjour,
j'ai du mal a comprendre comment on utilise cette fonction, comment envoit-on un pointeur en parametre ? pourrier vous me donner un exemple de code utilisant cette fonction ?
de plus, je n'ai pas tres bien compris pourquoi il y a un return a la fin de la fonction si la chaine est directement modifier, pourquoi renvoit-on la chaine qui a ete donner en parametre si ce n'est pas une copie de la chaine qui est modifier
j'ai du mal a comprendre comment on utilise cette fonction, comment envoit-on un pointeur en parametre ? pourrier vous me donner un exemple de code utilisant cette fonction ?
de plus, je n'ai pas tres bien compris pourquoi il y a un return a la fin de la fonction si la chaine est directement modifier, pourquoi renvoit-on la chaine qui a ete donner en parametre si ce n'est pas une copie de la chaine qui est modifier
Tu n'a pas tors:
il ne sert en théorie à rien de retourner l'adresse de la chaîne.
Toutefois, ce genre de returns peut permettre dans certains cas de faire une pierre deux coup, et cela ne coute rien sinon de la clarté de la faire.
Un exemple de code:
il ne sert en théorie à rien de retourner l'adresse de la chaîne.
Toutefois, ce genre de returns peut permettre dans certains cas de faire une pierre deux coup, et cela ne coute rien sinon de la clarté de la faire.
Un exemple de code:
#include <stdio.h> #include <stdlib.h> // le code de la fonction itoa à rajouter int main(argc, **argv) { int nombre; char *chaine; nombre = 42; chaine = malloc(3); // attention à la taille du malloc !! il doit être égal à la taille de la chaine plus 1 ! itoa(nombre, chaine); printf("%s", chaine); free(chaine); // ne pas oublier non plus, très important. }
Je viens de m'apercevoir que plus aucun code ne peut se compiler (même le code par défaut !) ce qui veut dire que l'erreur viens du logiciel. Je vais essayer de trouvé ce qu'il se passe et je vous préviendrais dés que j'aurais réussis à le refaire marcher. (quand je pense à tout ce temps que j'ai passé alors que si ça se trouve mon code marchait parfaitement !)