besoin de votre aide [C] - C++ - Programmation
Marsh Posté le 09-05-2002 à 16:43:03
bon j ai trouve tt seul en fait
#include <stdio.h>
main()
{
char ip[15];
int a,b,c,d;
flushall();
puts("donnez ip a convertir" );
scanf("%s",ip);
sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d);
printf("ip est: %d %d %d %d",a,b,c,d);
}
Marsh Posté le 09-05-2002 à 18:01:37
bon j ai un presque fini, mais la y a des problemes au niveau de mes variables qui apparement ne supporte pas des nombres aussi grand :
#include <stdio.h>
main()
{
char ip[15];
int a,b,c,d;
long ip1,ip2,ip3,ipfinal,coef1,coef2,coef3;
flushall();
coef1=16777216;
coef2=65536;
coef3=256;
puts("donnez ip a convertir" );
scanf("%s",&ip);
sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d);
printf("%d %d %d %d\n",a,b,c,d);
ip1=a*coef1;
ip2=b*coef2;
ip3=c*coef3;
ipfinal=ip1+ip2+ip3+d;
printf("%d %d %d %d\n",ip1,ip2,ip3,d);
printf("ip convertie: %d\n",ipfinal);
}
j ai essayer avec plusieurs type de variable (double,float,long), mais c tjrs pareil
le resultat est faux !
cependant si je diminue la valeur de coef1,coef2 et coef3, alors la le calcul se fais sans probleme
je vois pas d'ou ca peut venir
Marsh Posté le 09-05-2002 à 18:55:37
prems a écrit a écrit : Le pb c'est que quand tu affiches tes ip1, ip2, ip3 tu demande à ce qu'on t'affiche des int (%d) au lieu de long (%ld je crois). |
nan ca change rien
Marsh Posté le 10-05-2002 à 13:57:18
un ti
j ai tjrs pas trouve de solution !
avec comme type "long" je devrai bien pouvoir faire des calculs avec des nombres aussi grand ?
parce que la j affiche la valeur de "a" par exemple avant la multiplication, et elle est pas nulle
ensuite j affiche la valeur de ip1 apres la multiplication et ca me donne 0
si je baisse le coef1, ca marche tres bien
j ai besoin qu'on m eclaire un peu la
help meee
[jfdsdjhfuetppo]--Message édité par djtoz le 10-05-2002 à 13:58:31--[/jfdsdjhfuetppo]
Marsh Posté le 10-05-2002 à 14:21:04
long int = (sur plate formes 32 bits) = int = - (2^31 + 1) à + (2^31), soit quelques 2 000 000 000
Marsh Posté le 10-05-2002 à 14:51:21
hum ben oue mais moi c au dela de ca alors
pk si je multiplie par exemple 245*16777216, ben on est deja a plus de 4milliard
c kel type qu'il faut que j utilise alors ?
Marsh Posté le 10-05-2002 à 14:54:03
double, mais y a parfois une perte de précision... enfin non je sais plus
Sous Delphi y a le Int64, ?2^63 à 2^63?1, soit environ 18 000 000 000 000 000 000 , mais je pense pas qu'en C y ait quoi que ce soit d'équivalent.
Tu peux toujours utiliser unsigned long, ça va jusqu'à 4 200 000 000
[jfdsdjhfuetppo]--Message édité par antp le 10-05-2002 à 14:54:50--[/jfdsdjhfuetppo]
Marsh Posté le 10-05-2002 à 15:00:26
bon moi le grand max c par exemple pour convertir une ip de 255.255.255.255
ca donne 4 294 967 295
alors meme le unsigned long est po good !!
ouinnnnnnnnnnnnnn
je trouve ca qd meme allucinant d avoir autant de mal a faire des calculs avec de tels nombres, pour un ordinateur c rien du tout ca...
c zarb
[jfdsdjhfuetppo]--Message édité par djtoz le 10-05-2002 à 15:01:35--[/jfdsdjhfuetppo]
Marsh Posté le 10-05-2002 à 15:48:50
255^4 ça rentre dans 2^32 - 1 (unsigned long int), vu que 2^32 = 256^4
Donc à priori ça devrait aller, tant que chaque morceau de ton ip est valide ( 0->255 )
[jfdsdjhfuetppo]--Message édité par antp le 10-05-2002 à 15:49:40--[/jfdsdjhfuetppo]
Marsh Posté le 10-05-2002 à 15:50:21
djtoz a écrit a écrit : bon moi le grand max c par exemple pour convertir une ip de 255.255.255.255 ca donne 4 294 967 295 alors meme le unsigned long est po good !! ouinnnnnnnnnnnnnn je trouve ca qd meme allucinant d avoir autant de mal a faire des calculs avec de tels nombres, pour un ordinateur c rien du tout ca... c zarb |
vive les gens qui lisent pas la doc ... les @IP c effectivement des ulong, alors viens pas dire que ca rentre pas dedans !
Marsh Posté le 10-05-2002 à 15:54:36
HappyHarry a écrit a écrit : vive les gens qui lisent pas la doc ... les @IP c effectivement des ulong, alors viens pas dire que ca rentre pas dedans ! |
Ouais heureusement que je disais "environ" quand je donnais des chiffres finissant par 000
Marsh Posté le 10-05-2002 à 16:13:34
antp a écrit a écrit : 255^4 ça rentre dans 2^32 - 1 (unsigned long int), vu que 2^32 = 256^4 Donc à priori ça devrait aller, tant que chaque morceau de ton ip est valide ( 0->255 ) |
ok ben j essaie ca ce soir des que je rentre du boulot
thx
Marsh Posté le 11-05-2002 à 18:16:09
bon tjrs le meme probleme
meme en mettant unsigned long int
si quelqu'un pouvait essayer de le compile rapido pour voir ce que ca donne chez vous
#include <stdio.h>
main()
{
char ip[15];
int a,b,c,d;
unsigned long int ipa,ipb,ipc,ipfinal,coefa,coefb,coefc;
flushall();
coefa=16777216;
coefb=65536;
coefc=256;
puts("donnez ip a convertir" );
scanf("%s",&ip);
sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d);
printf("%d %d %d %d %d %d %d\n",a,b,c,d,coefa,coefb,coefc);
ipa=a*coefa;
ipb=b*coefb;
ipc=c*coefc;
ipfinal=ipa+ipb+ipc+d;
printf("%d %d %d %d\n",ipa,ipb,ipc,d);
printf("ip convertie: %d\n",ipfinal);
}
Marsh Posté le 11-05-2002 à 18:41:11
Heu je pense à un truc... tu fais tes printf avec des %d... mais %d/%i c'est pour "signed decimal integer"... ici si ce sont des "unsigned int" tu dois utiliser %u, qui représente un affichage en "unsigned decimal integer", dixit la doc de Borland:
Citation : Numerics |
[jfdsdjhfuetppo]--Message édité par antp le 11-05-2002 à 18:41:58--[/jfdsdjhfuetppo]
Marsh Posté le 11-05-2002 à 19:54:57
ca change rien, puis meme il se passe des choses tres bizarre avec ce code :
#include <stdio.h>
main()
{
char ip[15];
int a,b,c,d;
unsigned long int ipa,ipb,ipc,ipfinal,coefa,coefb,coefc;
flushall();
coefa=16777216;
coefb=65536;
coefc=256;
puts("donnez ip a convertir" );
scanf("%s",&ip);
sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d);
printf("%d %d %d %d %u %u %u\n",a,b,c,d,coefa,coefb,coefc);
ipa=a*coefa;
ipb=b*coefb;
ipc=c*coefc;
ipfinal=ipa+ipb+ipc+d;
printf("%u %u %u %u\n",ipa,ipb,ipc,d);
printf("ip convertie: %d\n",ipfinal);
}
maintenant voila ce que ca donne qd j execute le prog :
C:\>ip
donnez ip a convertir
120.56.23.45
120 56 23 45 0 256 0
0 30720 0 56
ip convertie: 5933
donc deja un truc ke pige pas c'est qu'il m affiche pas les bonnes valeurs pour mes coefs
le 256 la il me l affiche comme si c'etait la variable b alors que c'est la c !
je comprends plus rien !
Marsh Posté le 11-05-2002 à 20:43:39
Ton code marchait chez moi après que j'ai mis des %u dans tous les printf, et mis les variable int en unsigned long int.
Marsh Posté le 09-05-2002 à 16:32:47
salut
j essaie de coder un convertisseur d'ip
ds un premier temps j essaie d'associer chaque partie de l'ip ds une variable differente
#include <stdio.h>
main()
{
char ip[15];
int a,b,c,d;
flushall();
puts("donnez ip a convertir" );
scanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d);
printf("ip est: %d %d %d %d",a,b,c,d);
}
la en faite le resultat me sort n'importe quoi ds les variables a,b,c,d
merci d'avance pour votre aide