Advertisement
LucaVinci110898

IndIP/es12.c

Mar 8th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.24 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. /* Conta il numero di punti all'interno di una stringa */
  4. int conta_punti(char s[]){
  5.     int i = 0;
  6.     int c = 0;
  7.     while(s[i] != '\0'){
  8.         if(s[i] == '.'){
  9.             c++;
  10.         }
  11.         i++;
  12.     }
  13.     return c;
  14. }
  15. /* Restituisce il numero che andrà moltiplicato per convertire il numero da stringa a intero */
  16. int pot(int x){
  17.     int c = 1;
  18.     int i = 0;
  19.     while(i < x){
  20.         c = c * 10;
  21.         i++;
  22.     }
  23.     return c;
  24. }
  25. /* Cambio di base da decimale a binario */
  26. void bin(int n,int N[],int c){
  27.     int f;
  28.     while(n != 0){
  29.         f = n%2;
  30.         n = n/2;
  31.         N[c] = f;
  32.         c--;
  33.     }
  34. }
  35. /* Funzione per calcolare potenze */
  36. unsigned int pov(int b,int e){
  37.     int i = 0;
  38.     unsigned int c = 1;
  39.     while(i < e){
  40.         c = c * b;
  41.         i++;
  42.     }
  43.     return c;
  44. }
  45. /* Funzione che converte da binario decimale */
  46. unsigned int conv_bin(int N[],int e){
  47.     int i = 0;
  48.     int E = e;
  49.     unsigned int c = 0;
  50.     while(i < e + 1){
  51.         c = c + (N[i]*pov(2,E));
  52.         i++;
  53.         E--;
  54.     }
  55.     return c;
  56. }
  57. int valid_ip(char s[]) {
  58.     int i = 0;
  59.     int j = 0;
  60.     int a = 0;
  61.     int r,k,R,p;
  62.     r = conta_punti(s);
  63.     /* Controllo per vedere se il numero di punti all'interno della stringa è valido */
  64.     if(r != 3){
  65.         return 0;
  66.     }
  67.     while(s[i] != '\0'){
  68.         if(s[i] == '.'){
  69.             /* Se il punto è in posizione 0 */
  70.             if(i == 0){
  71.                 return 0;
  72.             }
  73.             k = i - j;
  74.             p = j - 1;
  75.             while(k < i){
  76.                 /* Controllo se una cifra è un numero */
  77.                 if(s[k] < '0' || s[k] > '9'){
  78.                     return 0;
  79.                 }
  80.                 R = s[k] - '0';
  81.                 a = a + (R*pot(p));
  82.                 p--;
  83.                 k++;
  84.             }
  85.             if(a > 255){
  86.                 return 0;
  87.             }
  88.             a = 0;
  89.             j = -1;
  90.         }
  91.         if(s[i] != '.' && s[i + 1] == '\0'){
  92.             k = i - j;
  93.             p = j;
  94.             while(k < i+1){
  95.                 if(s[k] < '0' || s[k] > '9'){
  96.                     return 0;
  97.                 }
  98.                 R = s[k] - '0';
  99.                 a = a + (R*pot(p));
  100.                 p--;
  101.                 k++;
  102.             }
  103.             if(a > 255){
  104.                 return 0;
  105.             }
  106.             a = 0;
  107.             j = -1;
  108.         }
  109.         if((s[i] == '.' && s[i + 1] == '\0') || (s[i] == '.' && s[i + 1] == '.')){
  110.             return 0;
  111.         }
  112.         j++;
  113.         i++;
  114.     }
  115.     return 1;
  116. }
  117. unsigned int ip2int(char ip[]) {
  118.     int N[31] = {0};
  119.     int i = 0;
  120.     int j = 0;
  121.     int a = 0;
  122.     int c = 7;
  123.     int k,R,p;
  124.     int e = 31;
  125.     unsigned int f;
  126.     while(ip[i] != '\0'){
  127.         if(ip[i] == '.'){
  128.             k = i - j;
  129.             p = j - 1;
  130.             while(k < i){
  131.                 R = ip[k] - '0';
  132.                 a = a + (R*pot(p));
  133.                 p--;
  134.                 k++;
  135.             }
  136.             bin(a,N,c);
  137.             c = c + 8;
  138.             a = 0;
  139.             j = -1;
  140.         }
  141.         if(ip[i] != '.' && ip[i + 1] == '\0'){
  142.             k = i - j;
  143.             p = j;
  144.             while(k < i+1){
  145.                 R = ip[k] - '0';
  146.                 a = a + (R*pot(p));
  147.                 p--;
  148.                 k++;
  149.             }
  150.             bin(a,N,c);
  151.             c = c + 8;
  152.             a = 0;
  153.             j = -1;
  154.         }
  155.         j++;
  156.         i++;
  157.     }
  158.     f = conv_bin(N,e);
  159.     return f;
  160. }
  161. char ip_class(char ip[]) {
  162.     int N[7] = {0};
  163.     int i = 0;
  164.     int j = 0;
  165.     int a = 0;
  166.     int c = 7;
  167.     int k,R,p;
  168.  
  169.     while(ip[i] != '\0'){
  170.         if(ip[i] == '.'){
  171.             k = i - j;
  172.             p = j - 1;
  173.             while(k < i){
  174.                 R = ip[k] - '0';
  175.                 a = a + (R*pot(p));
  176.                 p--;
  177.                 k++;
  178.             }
  179.             bin(a,N,c);
  180.             ip[i + 1] = '\0';
  181.         }
  182.         i++;
  183.         j++;
  184.     }
  185.     if(N[0] == 0)
  186.         return 'A';
  187.    
  188.     if(N[0] == 1 && N[1] == 0)
  189.         return 'B';
  190.  
  191.     if(N[0] == 1 && N[1] == 1 && N[2] == 0)
  192.         return 'C';
  193.    
  194.     if(N[0] == 1 && N[1] == 1 && N[2] == 1 && N[3] == 0)
  195.         return 'D';
  196.  
  197.     if(N[0] == 1 && N[1] == 1 && N[2] == 1 && N[3] == 1)
  198.         return 'E';
  199.  
  200.     return -1;
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement