Advertisement
pablo7890

ip

Mar 18th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <cstdlib>
  4. int main(){
  5.   char buf[512];
  6.   unsigned long long ipmask;
  7.   unsigned n=(unsigned)strtoul(fgets(buf,512,stdin),0,10);
  8.   while(n-- && fgets(buf,512,stdin)){
  9.     char* p=buf;
  10.     while((p=strtok(p," "))){
  11.       ipmask<<=8;
  12.       ipmask|=strtoul(p,0,10);
  13.       p=0;
  14.     }
  15.     unsigned long ipf=(((unsigned long*)&ipmask)[1]&*((unsigned long*)&ipmask))+1;  // +1 na adres sieci
  16.     unsigned long ipl=(((unsigned long*)&ipmask)[1]|(~*((unsigned long*)&ipmask)))-1; // -1 na broadcast
  17.     if(ipl>ipf){ // pierwsze ip ma byc mniejsze od ostatniego w ten sposob zalatwione maski 31 i 32 bity
  18.       fprintf(stdout,"ilosc adresow: %lu\npierwszy adres: %d.%d.%d.%d\nostatni adres: %d.%d.%d.%d\n",(~*((unsigned long*)&ipmask))-1, // mozna jeszcze prosciej policzyc, nie potrzeba logarytmow
  19.       ((unsigned char*)(&ipf))[3],((unsigned char*)(&ipf))[2],((unsigned char*)(&ipf))[1],((unsigned char*)(&ipf))[0],
  20.       ((unsigned char*)(&ipl))[3],((unsigned char*)(&ipl))[2],((unsigned char*)(&ipl))[1],((unsigned char*)(&ipl))[0]);
  21.     }else fprintf(stdout,"ilosc adresow: 0\n");
  22.   }
  23.   return 0;
  24.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement