
Envoyé par
droiter
merci, mais je genere une erreur, mon stdio.h utilise des fonction assez restrain juste le printf.
meme si je met stdio.h j'ai des erreur parce que le pic ne sais pas tout utilisé...il y a pas une autre methode...je sais j'ennuie mon monde...surtout en java...il y a plus de choix

....mais je suis obligé d'utilisé le c
Java sur PIC, mais bien sûr...
Le principe est de lire 2 caratères, d'en faire une chaine, de les convertir en une valeur numérique et ainsi de suite. C'est un peu ce que fait strtol(), mais sur une largeur fixe. Je propose ceci :
long str_tol_fixed (char const *s, int width, char **pp_end, int base);
qui s'utilise comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
int main (void)
{
char trame[] = ":1234567890";
char *p_end = trame + 1;
/* attention, si la trame est erronee : boucle infinie ! */
while (*p_end != 0)
{
int n = str_tol_fixed (p_end, 2, &p_end, 10);
printf ("n = %d\n", n);
}
return 0;
} |
1 2 3 4 5 6 7 8 9
|
n = 12
n = 34
n = 56
n = 78
n = 90
Process returned 0 (0x0) execution time : 0.039 s
Press any key to continue. |
Tu sauras la coder ?
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include <stdio.h>
#include <stdlib.h>
#include <strings.h>
long str_tol_fixed (char const *s, int width, char **pp_end, int base)
{
long n = 0;
/* allocation de la sous-chaine */
char *sub = malloc (width + 1);
if (sub != NULL)
{
int i;
/* initialisation de la sous chaine */
for (i = 0; i < width; i++)
{
sub[i] = s[i];
}
sub[i] = 0;
/* conversion standard */
{
char *pend_sub;
long val = strtol (sub, &pend_sub, base);
/* verification */
if (*pend_sub == 0)
{
if (pp_end != NULL)
{
(*pp_end) += width;
}
n = val;
}
else
{
/* en cas d'erreur, on s'arrete a la premiere conversion fausse */
if (pp_end != NULL)
{
(*pp_end) += (pend_sub - sub);
}
}
}
free (sub);
}
return n;
} |
Partager