IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

convertir une chaine en entier >2147483647


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 45
    Points : 25
    Points
    25
    Par défaut convertir une chaine en entier >2147483647
    Bonjour à tous,

    Je sais qu'à la base ma question est fréquemment posée mais j'ai déjà cherché et j'ai pas trouvé une réponse à mon problème.
    En fait je dois convertir des chaines qui correspondent à des entiers > 2147483647 =2^31-1. Du coup strtol et strtod ne marchent pas.

    Des idées ?

    Merci,

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Citation Envoyé par sanzero Voir le message
    Bonjour à tous,

    Je sais qu'à la base ma question est fréquemment posée mais j'ai déjà cherché et j'ai pas trouvé une réponse à mon problème.
    En fait je dois convertir des chaines qui correspondent à des entiers > 2147483647 =2^31-1. Du coup strtol et strtod ne marchent pas.

    Des idées ?

    Merci,
    Ton résultat (l'entier) tu le stockes dans quel type de données ? Tu es sous quel OS ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé avec plusieurs types int double float long mais ça marche pas.
    Sinon je suis sous windows XP

    Merci

  4. #4
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Ok, donc tu ne sais pas trop comment chercher, c'est ça ton problème.
    Pas grave !!! On ne fait pas du 64bit tous les jours (quoi que ... c'est l'avenir !!)

    Essaie : "strtol 64 bit" dans google. Le 1er lien (msdn) est super intéressant.

    Pour travailler sur des entiers 64bit, il faut peut-etre un SDK particulier.

    Tu codes avec quoi ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Il faut utiliser la fonction strtoll : http://linux.die.net/man/3/strtoll
    La fonction renvoie une valeur en long long int, qui correspond à une taille d'au moins 64 bits.

  6. #6
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Il faut utiliser la fonction strtoll : http://linux.die.net/man/3/strtoll
    La fonction renvoie une valeur en long long int, qui correspond à une taille d'au moins 64 bits.
    Mouais !! Sous Windows il va avoir du mal à trouver cette fonction!
    D'où ma question précédente à propos de l'OS !!!!!!

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    Mouais !! Sous Windows il va avoir du mal à trouver cette fonction!
    D'où ma question précédente à propos de l'OS !!!!!!
    Quel rapport avec Windows ? C'est une fonction C (C99 pour être plus précis).

  8. #8
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Quel rapport avec Windows ? C'est une fonction C (C99 pour être plus précis).
    Ok, tu as raison !! J'associe trop Visual Studio à Windows.
    On va donc dire que Visual Studio ne respecte pas C99 pour faire simple.
    Ca marche avec MinGW.

    J'aurai appris un truc aujourd'hui

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Et si long long n'est toujours pas suffisant tu peux faire ls calculs directement sur tes chaînes comme c'est le cas ici, sinon t'as qu'à télécharger la bibliothèque gmp qui est beuacoup plus aboutie.

  10. #10
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 802
    Points
    1 802
    Par défaut
    bon tu veux assaye ca
    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
    30
    31
    long long int strTOint(const char *val,int *error)
    {
    	*error = 0;
    	long long int nbr = 0;
            int i,s,sign=1;
    	s = lenStr(val);
     
    	if((val[0]>47)&&(val[0]<58))
    		i=0;
    	else if(val[0]=='-')
    	{
    		sign = -1;
    		i=1;
    	}
    	else if(val[0]=='+')
    		i=1;
     
    	for(;i<s;i++)
    	{
    		if(val[i]==',')
    			continue;
    		if((val[i]>47)&&(val[i]<58))
    			nbr = nbr*10+(val[i]-48);
    		else
    		{
    			*error = -1;
    			break;
    		}
    	}
    	return nbr*sign;
    }
    tu modifies le code si tu veux. sinon je fais un peu de pub: j'ai une biblioteque cgstring qui fait quelque truc interressant comme remplacer des sous chaine, convertir en float, effacer les doublons ...
    http://sourceforge.net/projects/libwebdoc/ d'ici a vendredi il ya 10 nouvelle fonction et des corrections qui seront mises en ligne.

  11. #11
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par lilington Voir le message
    bon tu veux assaye ca
    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
    30
    31
    long long int strTOint(const char *val,int *error)
    {
        *error = 0;
        long long int nbr = 0;
            int i,s,sign=1;
        s = lenStr(val);
     
        if((val[0]>47)&&(val[0]<58))
            i=0;
        else if(val[0]=='-')
        {
            sign = -1;
            i=1;
        }
        else if(val[0]=='+')
            i=1;
     
        for(;i<s;i++)
        {
            if(val[i]==',')
                continue;
            if((val[i]>47)&&(val[i]<58))
                nbr = nbr*10+(val[i]-48);
            else
            {
                *error = -1;
                break;
            }
        }
        return nbr*sign;
    }
    Mais c'est quoi le problème avec strtoll ?

  12. #12
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 802
    Points
    1 802
    Par défaut
    j'ai jamais dit qu'il y avait un probleme. je lui propose une solution personnelle.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Merci à tous pour vos réponses.
    Finalement j'ai utilisé strtoll et ça marche bien.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/02/2011, 18h27
  2. Réponses: 16
    Dernier message: 01/09/2008, 21h25
  3. convertir une chaine en entier long
    Par boulhous dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/08/2007, 23h22
  4. Réponses: 6
    Dernier message: 09/04/2006, 17h26
  5. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo