voila, j'ai une adresse IP du style 192.168.0.4 et je doi la transformer en décimal. Existe-t-il une fonction pouvant la transformer directement ou dois-je transformer chaque paquet en héxa puis en décimal?
Version imprimable
voila, j'ai une adresse IP du style 192.168.0.4 et je doi la transformer en décimal. Existe-t-il une fonction pouvant la transformer directement ou dois-je transformer chaque paquet en héxa puis en décimal?
Une petite question ?
Pourquoi convertir d'abord en hexa ??
Sinon, il est tres facile de contertir ton adresse IP en décimal avec une petite fonction de quelques lignes.
Je suppose que tu veux dire en numérique (tableau de 4 unsigned char, par exemple)Citation:
Envoyé par mrtatou
sscanf(), avec "%d"...
Si tu es flemmard...
http://emmanuel-delahaye.developpez.com/clib.htm
Module IPV4
Bonjour,
Ce type d'adresse est déjà en décimal...Citation:
voila, j'ai une adresse IP du style 192.168.0.4 et je doi la transformer en décimal.
exemple :
http://www.google.fr
http://66.249.93.104 [décimal]
http://0x42.0xF9.0x5D.0x68 [dotted hex]
http://0x42F95D68 [long hex]
P.S : Fonctionne pas sous IE mais très bien sous firefox...
[edit] : ah la question était peut être, comment faire du atoi() ?
man inet_addr: tu devrais trouver ton bonheur (ca marche sous linux et windows:: le reste je sais pas !)
Code:
1
2
3
4 char destaddr[]="192.168.0.12"; struct sockaddr_in dest_addr; dest_addr.sin_addr.s_addr = inet_addr (destaddr);
Prends en compte le fait que le résultat fourni par inet_addr() est (a priori) en Big-Endian
Comment ça 'a-priori' ? C'est pas très précis. Le format est soit H (Host), soit N (Network).Citation:
Envoyé par loufoque
Il faut choisir la bonne fonction :
http://www.linux-france.org/article/man-fr/man3/inet_makeaddr-3.html
inet_addr() retourne l'adresse au format network : On peut mettre directement le résultat retourné dans une structure sockaddr_in.
A priori car j'en n'étais pas sûr, j'ai seulement utilisé mes dons de devin.Citation:
Comment ça 'a-priori' ? C'est pas très précis. Le format est soit H (Host), soit N (Network).
Dans ce cas, vérifie. On est censé fournir des informations fiables et vérifiées.Citation:
Envoyé par loufoque
donc voila ce que je fais:
mais ca ne marche pas alors que je voudrai que ca me donne: 12625921Code:
1
2
3
4
5 ...... long ip =inet_addr(192.168.0.1); printf("%ld",ip); ......
Cela devrait marcher... je sais pas si l'erreur vient du manque de guillement dans ton inet_addr ou plutôt du fait que je l'affiche sous chaîne de caractères ;)Code:
1
2
3 struct sockaddr_in dest; dest.sin_addr.s_addr = inet_addr("192.168.0.1"); printf("%s", dest.sin_addr.s_addr);
désolé mais ton code ne fonctionne pas chez moi...
"erreur de segmentation"
T'as essayé ton code avec l'adresse entre guillements ?
oui oui!
peut etre qu'il me manque des biblio?
pourtant j'ai bien mis "<sys/socket.h>", "<netinet/in.h>" et "<arpa/inet.h>"...
et quand je met un "%d" ca m'affiche : -1203338158
Normal, la variable dest.sin_addr.s_addr est un unsigned long d'après la définition donnée par la page man inet.
Pourquoi tenter de l'afficher comme une chaîne de caractère?
Jc
Je sais pas, mais je crois qu'une fois je l'avais affichée au format décimal en tant que chaine de caractère :?:
ba juste pour une vérification...
mais c'est vrai que ca ne m'est pas utile pour la suite.
comment vérifier que ca a bien fonctionné alors?
Citation:
Envoyé par mrtatou
Page manCode:char *inet_ntoa(struct in_addr in);