STRTOUL |
Chaine à naturel long |
---|---|
Langage C | stdlib.h |
Syntaxe
unsigned long strtoul(const char *str1,char **fin,int base); |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le nombre. |
fin | Ce paramètre retourne un pointeur à la fin du nombre dans la chaîne de caractères ASCIZ. |
base | Ce paramètre permet d'indiquer la base numérique du nombre à extraire (1 à 36). |
Description
Cette fonction permet de convertir la chaîne de caractères en nombre de type non-signée «long».
Algorithme
MODULE STRTOUL(str, fin, base) Ignorer les espaces blancs au début de str SI str commence par "0x" ou "0X" ALORS Définir la base à 16 (hexadécimal) SINON SI str commence par "0" ALORS Définir la base à 8 (octale) SINON Utiliser la base fournie ou 10 par défaut (décimale) FIN SI résultat ← 0 BOUCLE POUR CHAQUE caractère ch dans str FAIRE Convertir ch en sa valeur numérique (valeur de 0 à 9 ou A à F selon la base) SI la valeur de ch est valide pour la base donnée ALORS Ajouter cette valeur au résultat SINON Sortir de la boucle FIN SI FIN BOUCLE POUR CHAQUE SI fin est non NULL ALORS Assigner à fin l'adresse du caractère suivant le dernier caractère traité FIN SI RETOURNE le résultat en tant qu'entier non signé |
Remarques
- Paramètre base et flexibilité : Comme strtol, strtoul prend un paramètre base pour spécifier la base de numération utilisée dans la conversion. Les bases valides sont 10 pour la notation décimale, 16 pour la notation hexadécimale, ou 8 pour la notation octale. Si base est 0, la base est automatiquement déterminée en fonction du préfixe de la chaîne, par exemple "0x" pour l'hexadécimal ou "0" pour l'octal. Cette flexibilité permet de traiter facilement différents formats numériques.
- Pointeur fin pour suivre la conversion : Le paramètre fin permet de suivre l'endroit où la conversion s'est arrêtée. Après l'appel de strtoul, *fin pointe vers le premier caractère qui n'a pas été analysé. Si la conversion a réussi et que la chaîne a été entièrement convertie, *fin pointera vers la fin de la chaîne de caractères. Cela permet de traiter des chaînes de caractères contenant des données supplémentaires après le nombre ou de vérifier si la conversion s'est terminée correctement.
- Gestion des erreurs : Si strtoul rencontre une chaîne invalide ou si la chaîne de caractères ne commence pas par un nombre, elle renvoie 0 et fin pointe vers le début de la chaîne de caractères. Si la valeur du nombre est trop grande pour être stockée dans un unsigned long int, la fonction renverra ULONG_MAX et la variable errno sera définie à ERANGE pour signaler un dépassement de capacité. Cela permet de détecter facilement les erreurs de conversion.
- Gestion des espaces blancs : Comme d'autres fonctions de conversion, strtoul ignore les espaces blancs au début de la chaîne avant de commencer la conversion. Cela permet à la fonction de gérer des chaînes de caractères avec des espaces inutiles ou des tabulations sans interférer avec la conversion des nombres. La conversion commencera dès qu'un caractère valide est rencontré et s'arrêtera dès qu'un caractère invalide est trouvé.
- Notations spécifiques et prise en charge des préfixes : strtoul gère les notations hexadécimale, octale et décimale. Si la chaîne de caractères commence par "0x" ou "0X", elle sera traitée comme un nombre hexadécimal. Si elle commence par "0", elle sera interprétée comme un nombre octal. Si aucun préfixe n'est présent, la chaîne de caractères sera analysée selon la base spécifiée. Cette fonctionnalité rend strtoul particulièrement utile pour la conversion de nombres dans différents formats d'entrée.
- Comportement avec des chaînes invalides ou partiellement valides : Si la chaîne de caractères contient des caractères invalides après un nombre valide, strtoul convertira jusqu'à ce qu'elle rencontre un caractère non valide. Par exemple, pour la chaîne "123abc", elle retournera 123 et *fin pointera sur "abc". Cela permet de récupérer une partie valide d'une chaîne tout en identifiant facilement la partie restante.
- Utilisation courante : strtoul est couramment utilisée dans les programmes analysant des entrées numériques sous forme de chaînes de caractères, notamment dans les analyseurs de fichiers, les analyseurs de ligne de commande, et les applications traitant des nombres dans des bases autres que la base décimale (par exemple, l'hexadécimal ou l'octal). Grâce à sa gestion des bases multiples et de la détection des erreurs, elle est particulièrement adaptée aux situations où des conversions robustes et flexibles sont nécessaires.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main() {
- char *s, *sr;
- s = "0";
- printf("0 = %i\n",strtoul(s,&sr,10));
- s = "1";
- printf("1 = %i\n",strtoul(s,&sr,10));
- s = "123";
- printf("123 = %i\n",strtoul(s,&sr,10));
- s = "-123";
- printf("-123 = %i\n",strtoul(s,&sr,10));
- s = "G";
- printf("G = %i\n",strtoul(s,&sr,10));
- return 0;
- }
on obtiendra le résultat suivant :
0 = 01 = 1
123 = 123
-123 = 0
G = 0
Voir également
Langage de programmation - C - Référence procédures et fonctions - atol
Langage de programmation - C - Référence procédures et fonctions - strtol
Langage de programmation - C++ - Référence procédures et fonctions - strtoul
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 270.
Dernière mise à jour : Mardi, le 28 juillet 2015