Longip ... probleme

Résolu
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 - 7 oct. 2004 à 13:53
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 7 oct. 2004 à 20:22
Salut :)
Voila j'ai un petit probleme avec un code qui est censé me renvoyer le longip, il me retourne -795585024 au lieu de 2130772483 (longip de 127.1.2.3), voici mon code:

void longip(char ip[15]) {
char *b = strdup(ip);
char *ip1 = strtok(ip,".");
char *ip2 = strtok(0,".");
char *ip3 = strtok(0,".");
char *ip4 = strtok(0,".");
int ip5 = (int) ip1*256*256*256;
int ip6 = (int) ip2*256*256;
int ip7 = (int) ip3*256;
int ip8 = ip5+ip6+ip7;
char result[10];
sprintf(result,"%d\n",ip8);
printf(result);
}

merci de votre aide !

win

8 réponses

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
7 oct. 2004 à 17:33
Faut aussi corriger deux/trois trucs...
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void) {
  char ip[16];
  strcpy(ip,"127.1.2.3");
  char *ip1 = strtok(ip,".");
  char *ip2 = strtok(0,".");
  char *ip3 = strtok(0,".");
  char *ip4 = strtok(0,".");
  unsigned long ip5 = (unsigned long) atoi(ip1)*256*256*256;
  unsigned long ip6 = (unsigned long) atoi(ip2)*256*256;
  unsigned long ip7 = (unsigned long) atoi(ip3)*256;
  unsigned long ip8 = (unsigned long) atoi(ip4);
  printf("%lu\n", ip5 + ip6 + ip7 + ip8);
  return 0;
}
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
7 oct. 2004 à 18:48
Salut,
voici deux fonctions qui font la meme chose (en mieux je pense):

// avec atoi (bof)
unsigned long _ip(char * ip)
{
BYTE tmp[4];
char * c = ip;
for(int i = 0; i < 4; i++)
{
tmp[i] = atoi(c);
while(*c != '.' && *c) c++; c++;
}
return *((unsigned long*)tmp);
}

// sans atoi
unsigned long __ip(char * ip)
{
BYTE tmp[4];
char * c = ip;for(BYTE *b tmp, *f b + 4; b < f; b++)
{
*b = 0;
while(*c != '.' && *c)
{
*b *= 10;
*b += (*c++ - '0');
}
c++;
}
return *((unsigned long*)tmp);
}
3
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
7 oct. 2004 à 17:23
Essaie avec des unsigned long.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
7 oct. 2004 à 17:35
Salut,
Tu castes un char* en int, et ca donne le bon resultat ?
0

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

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
7 oct. 2004 à 18:03
Salut,
Faudrait pas l'appeler trop souvent cette func quand meme (4 appels de strtok() + 4 appels d'atoi() pour convertir une ip en DWORD, ouch).
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
7 oct. 2004 à 18:12
C'est sûr mais bon je me base sur son exemple.
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
7 oct. 2004 à 19:02
ok ça fonctionne nikel, merci les gars ;)

win
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
7 oct. 2004 à 20:22
Encore mieux, utiliser les fonctions réseau standards qui servent à ca:

in_addr_t inet_addr(const char *cp);


et (pas disponible sur tous les systèmes):

int inet_aton(const char *cp, struct in_addr *addr);


Kaid - kaid.fr.st
0
Rejoignez-nous