#include "numbers.h" /* Cette fonction lit un nombre. Elle va chercher absolument à traduire la chaîne passée en argument en un nombre. Si ce nombre n'est pas valide, alors l'int valid est mis à faux. Cette fonction reconnais les nombres en décimaux, les nombres en octal préfixés avec 0 et les nombres en hexadécimal préfixés avec 0x. */ int char_to_number(char *st, int *valid) { int whattype = 0, result = 0; *valid = 0; if (*st == '0') { st++; if (*st == 'x') { whattype = 1; st++; } else if (*st) { whattype = 2; } else { *valid = 1; return 0; } } while (*st) { switch (whattype) { case 0: if ((*st < '0') || (*st > '9')) { return 0; } result *= 10; result += *st - '0'; break; case 1: if (((*st < '0') || (*st > '9')) && ((*st < 'A') || (*st > 'F')) && ((*st < 'a') || (*st > 'f'))) { return 0; } result *= 16; if ((*st >= '0') && (*st <= '9')) { result += *st - '0'; } else if ((*st >= 'A') && (*st <= 'F')) { result += *st - 'A' + 10; } else { result += *st - 'a' + 10; } break; case 2: if ((*st < '0') || (*st > '7')) { return 0; } result *= 8; result += *st - '0'; break; } st++; } *valid = 1; return result; }