Atoi() 64 bits

Résolu
RaphAstronome Messages postés 104 Date d'inscription samedi 7 décembre 2002 Statut Membre Dernière intervention 17 août 2009 - 9 juin 2005 à 16:59
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 - 9 juin 2005 à 21:40
Il n'y aurait pas une verstion de atoi() pour les entiers 64 bits, non signé uint64_t ? signé ?RaphAstronome[url]http://www.astro5000.com/url[url]http://www.nintendogroupe.com/url
A voir également:

9 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juin 2005 à 18:02
_atoi64(char*);

ciao...
BruNews, MVP VC++
3
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
9 juin 2005 à 17:58
voilà la fonction(vite programmé mais testée)

uint64_t atoi64(const char *str,int radix=10)

{

// on estime que la base est de la forme 0123456789abcdefghi....

uint64_t n=0;

const char *c=str;

while(*c)

{

if((*c)>='0' && (*c)<='9')

n=n*radix+(*c)-'0';

else if(radix>10 && (*c)>='a' && (*c)<=('a'+radix-11))

n=n*radix+(*c)-'a'+10;

else if(radix>10 && (*c)>='A' && (*c)<=('A'+radix-11))

n=n*radix+(*c)-'A'+10;

else

return 0;

c++;

}

return n;

}

A m a u r y
0
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
9 juin 2005 à 18:00
elle marche que pour les nombre non signée mais il suffit que rajouter
un petit test pour le moins au départ . De plus s'il y a des espaces
dans la string çà ne marche pas .

A m a u r y
0
RaphAstronome Messages postés 104 Date d'inscription samedi 7 décembre 2002 Statut Membre Dernière intervention 17 août 2009
9 juin 2005 à 18:08
Ok, merci ca marche

RaphAstronome[url]http://www.astro5000.com/url[url]http://www.nintendogroupe.com/url
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
9 juin 2005 à 18:37
lol je pensait même pas que çà existait mais c'est standard ?

A m a u r y
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 juin 2005 à 18:42
Non surement pas standard, le nombre de fonctions C standard est
vraiment très limité (itoa par exemple n'est pas standard). Ici ce
n'est pas un problème puisque __int64 n'est pas standard non plus
0
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
9 juin 2005 à 19:09
c'est bien ce que je pensait :) mais en plus itoa a la désagréable
habitude de pas porter le même nom entre itoa64 _ita64 __itoa64
__itoa64__ on s'en sort pas ! Le mieux a la limite c'est d'utiliser
sscanf

sscanf("%I64u",&ui64);

sscanf("%I64i",&si64);

A m a u r y
0
RaphAstronome Messages postés 104 Date d'inscription samedi 7 décembre 2002 Statut Membre Dernière intervention 17 août 2009
9 juin 2005 à 20:36
A la limite si ca marche pas avec itoa64 mais avec _itoa64 on peut mettre
#define itoa(str) _itoa(str)


RaphAstronome
[url]http://www.astro5000.com/url
[url]http://www.nintendogroupe.com/url
0
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
9 juin 2005 à 21:40
oui mais il faut se tapper plein de ifdef selon les compilo .

a moins qu'il existe un truc du genre:

#if !(declared(itoa64))

#define itoa64 _itoa64

#endif



çà existe çà ? Ou alors faut faire des define selon le compilo

A m a u r y
0
Rejoignez-nous