comment faire pour convertir un entier en chaîne de caractères?
J'ai une fonction c avec le prototype suivant
extern void lcd_puts(const char *s);
dans mon autre fonction que j'ai quelque chose comme ce
send_to_lcd() {
uint8_t count = 10
lcd_puts(count);
}
ma question est comment puis-je convertir compter un pointeur de chaîne pour être en mesure de l'envoyer à lcd_puts
qui doit imprimer le comte sur un écran lcd
grâce
Savez-vous que les bibliothèques-vous? Avez-vous des
itoa
ou sprintf
?OriginalL'auteur w_hoami | 2011-09-05
Vous devez vous connecter pour publier un commentaire.
sprintf permet de formater une chaîne de caractères
Exemple rapide:
OriginalL'auteur jyore
Sur un microcontrôleur, vous devez être au moins un peu inquiet au sujet de la performance (ce qui exclut
sprintf
), voire la division est une opération très coûteuse sur ces puces. Donc, vous voulez un code optimisé pour un microcontrôleur.J'ai écrit quelques-uns ici: http://ideone.com/SsEUW (aurez besoin d'un peu de changements pour une utilisation avec C-style de chaînes au lieu de C++, mais la méthode doit être clair)
comme suggéré par Owen pourrait être faisable, mais
sprintf
est un horrible choix sur un microcontrôleur.Jusqu'à ce que l'OP ajoute les mots "j'ai besoin d'elle pour être rapide" à sa question, je m'en tiens à ma réponse que
sprintf
est le meilleur choix; il est largement pris en charge de la bibliothèque standard de la fonction (on ne peut pas dire la même chose pouritoa
).Oui, probablement
sprint
serait parfait, s'il est écrit à un écran LCD, c'est pas comme si tu vas voir les 1 ms (1000 cycles sur 1MHz proc) ou si le retard. Soyez prudent avec ce que parce que beaucoup de bibliothèques intégrées utiliser un stripped-down, non-standard sprintf qui ne pourrait pas faire ce que vous attendez (comme toujours d'impression au format Hexadécimal (PIC de %ld)), ou rien du toutIl est à la recherche d'un C les réponses.
OriginalL'auteur Ben Voigt
Cela dépend de ce que
lcd_puts
fait avec son argument. Une possibilité est comme suit:Mais n'oubliez pas que
str
est hors de portée dès quesend_to_lcd()
retourne. Donc, silcd_puts
se "souvient" de son argument d'entrée, ce qui aura un comportement indéterminé.Si c'est le cas, vous devrez
malloc
un tampon de chaîne à la place. Mais ensuite, vous aurez besoin de se rappeler àfree()
à un certain point, et ça fait plutôt désordre.malloc()
, vous pouvez utiliser unstatic
tampon (mais je ne pense pas quelcd_puts
enregistre l'argument -- il est probablement juste de réglage de broches numériques).Ouais, probablement pas. J'étais justement en train de préparer pour le pire des cas, où l'écran LCD n'est pas mis à jour jusqu'à plus tard ou quelque chose.
En tant que comte est essentiellement un petit entier non signé, %s comme un format à sprintf est susceptible d'accéder à violer.
Bonne prise, merci!
Pour microcontrôleur projets que j'ai éviter de malloc.
OriginalL'auteur Oliver Charlesworth
Cela semble être une approche raisonnable.
printf
de toute façon?Le printf se produit dans l'unité de test, pas la fonction. La question a été soulevée pour une méthode pour transformer un u_int8_t dans un char *. La fonction n'est que, sans les dépenses de frais généraux qui seraient associés à la famille printf.
renommé fonction pour indiquer son intention.
La fonction u82s() comme l'écrit n'est pas réentrant, car il utilise une chaîne statique. Peut-être une meilleure conception serait de fournir la chaîne comme argument. De cette façon, la fonction peut format le numéro dans n'importe quel endroit d'une longue chaîne. (Mais alors, il ne faut pas écrire '\0' à la fin). Je ne suis pas d'accord avec le précédent commentaire que cette fonction est lente. En fait, c'est peut-être un ordre de grandeur plus rapide que snprintf() ou des fonctions similaires. Il est également ordres de grandeur plus petite de la taille du code.
désolé pour mon inexpertise avec le c, mais demande quand exactement l'u82s() la fonction est appelée?
OriginalL'auteur EvilTeach
De prendre votre api.
C'est essentiellement la même que la réponse que vous avez choisi. Convertir la valeur de comptage dans une chaîne c, de sorte que lcd_puts pouvez l'utiliser.
OriginalL'auteur EvilTeach
Pour supprimer les parasites et rangé:
Je ne peux pas imprimer au-dessus de 32767 mais je pense que c'est quelque chose à faire avec mes options du compilateur.
OriginalL'auteur user1675013