bonjours,
j'ai un entier compris entre 0 et 4095
=> comment faire pour le convertir en une chaine de caractère qui fasse toujours 4 caractères ?
ex : 1 => "0001"
bonjours,
j'ai un entier compris entre 0 et 4095
=> comment faire pour le convertir en une chaine de caractère qui fasse toujours 4 caractères ?
ex : 1 => "0001"
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf ( "%04d", nb );
Envoyé par Emcy
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sprintf(chaine, "%04d", nb);
j'ai le code suivant :
=> j'ai le message d'avertissement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf((char*)&chaine_debug, "%04d", TabVLAN_Filter[myRow].ID);
les définitions des variables sont :type qualifier mismatch in assignment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 extern char chaine_debug[70]; // variable global static unsigned char myRow; // variable locale // ******** structure VLAN Filter ******************** typedef struct _StructA { unsigned int Enb:1; unsigned int Member:5; unsigned int NU:2; // bits non utilisés } StructA; typedef struct _StructB { unsigned int Priority:3; unsigned int Tagged:5; } StructB; typedef struct _StructVLAN { unsigned int ID; StructA A; StructB B; } StructVLAN; extern StructVLAN TabVLAN_Filter[16]; // variable global // ***************************************************
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(chaine_debug, "%04d", TabVLAN_Filter[myRow].ID);
c'est vrai que j'ai fait une erruer sur ce point mais j'ai toujours le meme message d'erreur...
Le & devant un nom de tableau n'est pas utilisé normalement, cependant ce n'est pas une erreur et &a signifie a si a est un tableau.Envoyé par souviron34
Etes-vous bien sûr que l'erreur est sur cette ligne, car il n'y a pas vraiment d'assignment explicite sur cette ligne.Envoyé par Emcy
lorsque je mets lal igne en commentaire, je n'ai plus d'erreur.
Remarque : je programme sur un petit micro-controlleur (PIC18F)
... mais je doute que ça change grand chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(chaine_debug, "%04u", TabVLAN_Filter[myRow].ID);
ça ne change rien au message d'erreur...
Je suis désolé, je ne vois pas d'erreur sur cette ligne.Envoyé par Emcy
sinon vous ne savez pas comment faire une fonction qui fait la transformation que je recherche ?
Normalement, sprintf() doit fonctionner sur toute implémentation standard. Sinon, il vous reste toujours itoa() (<stdlib.h>).Envoyé par Emcy
Pas forcément sur des systèmes avec des micro-controlleur et peu de mémoire.Envoyé par stephl
Il est souvent nécessaire de choisir le modèle de mèmoire correct.
Emcy: Quel modèle de mémoire as-tu choisi pour la compilation de ton programme?
c'est quoi un modèle de memoire ? je n'en ai jamais entendu parlé ...
finalement, j'ai touvé :
donc j'ai :
- Code Model : Small Code Model (<=64K bytes)
- Data Model : Large Data Model (all RAM Bank)
- Stack Model : Single-bank model
remarque : itoa fonctionne...
Je ne suis pas un gourou dans des "petits systèmes".
Mais j'ai remarqué que certaines fonctions standard comme printf, sprintf et autres ne fonctionnent que sous certaines modèles de mémoire.
Il faut lire la documentation de ton compilateur et de ton système.
d'accord, je vais regarder ça de plus près...
Alors utilisez itoa() qui est spécifique aux conversions entier -> chaîne, plutôt que sprintf() qui est un arsenal bien lourd pour cette simple conversion.Envoyé par Emcy
et comment fait-on pour insérer des 0 (vu que je veux qu'il y ai toujour 4 chiffres d'affichés)
j'ai utilisé cette methode (pas encore testée) : n'est-elle pas un peu lourde ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 itoa(TabVLAN_Filter[myRow].ID, StringTemp); j = 4; k=0; while (StringTemp[j]!='\0') { chaine_debug[k++] = '0'; } l = 0; for ( j = k; j < 5; j++ ){ chaine_debug[j] = StringTemp[l++]; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager