#include <ctype.h> // <cctype> en C++
int isxdigit( int character );
Cette fonction permet de tester si un caractère est un chiffre hexadécimal ou non. Pour rappel le système hexadécimal définit 16 chiffres : 0123456789ABCDEF.
int
car la fonction peut aussi accepter la valeur -1 (EOF - End Of File) correspondant à la fin d'un
flux.
La valeur de retour doit être interprétée en tant que valeur booléenne. une valeur positive non nulle signifira qu'il s'agit bien d'un chiffre hexadécimal. La valeur 0
indiquera qu'il ne s'agit pas d'un chiffre hexadécimal.
#include <ctype.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char buffer[80]; printf( "Enter a hexadecimal value : " ); scanf( "%[^\n]", buffer ); bool isCorrect = true; size_t length = strlen( buffer ); for( int i=0; i<length; i++ ) { if ( ! isxdigit( buffer[i] ) ) { isCorrect = false; } } if ( isCorrect ) { printf( "Your text (%s) is a hexadecimal number\n", buffer ); unsigned long value = strtoul( buffer, 0, 16 ); printf( "The corresponding decimal value is %zu\n", value ); } else { printf( "Your text (%s) is not a hexadecimal number\n", buffer ); } return EXIT_SUCCESS; }
Attention : cet exemple utilise des éléments de syntaxe définis dans le standard C99. L'emploie de l'option -std=c99
sur
la ligne de compilation de votre exemple est donc requis.
Voici un petit exemple d'exécution de ce programme :
$> gcc -o Sample -Wall -std=c99 Sample.c $> ./Sample Enter your text : zorro Your text (zorro) is not a hexadecimal number $> ./Sample Enter your text : fe13 Your text (fe13) is a hexadecimal number The corresponding decimal value is 65043 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :