Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <string.h>
- /* Conta il numero di punti all'interno di una stringa */
- int conta_punti(char s[]){
- int i = 0;
- int c = 0;
- while(s[i] != '\0'){
- if(s[i] == '.'){
- c++;
- }
- i++;
- }
- return c;
- }
- /* Restituisce il numero che andrà moltiplicato per convertire il numero da stringa a intero */
- int pot(int x){
- int c = 1;
- int i = 0;
- while(i < x){
- c = c * 10;
- i++;
- }
- return c;
- }
- /* Cambio di base da decimale a binario */
- void bin(int n,int N[],int c){
- int f;
- while(n != 0){
- f = n%2;
- n = n/2;
- N[c] = f;
- c--;
- }
- }
- /* Funzione per calcolare potenze */
- unsigned int pov(int b,int e){
- int i = 0;
- unsigned int c = 1;
- while(i < e){
- c = c * b;
- i++;
- }
- return c;
- }
- /* Funzione che converte da binario decimale */
- unsigned int conv_bin(int N[],int e){
- int i = 0;
- int E = e;
- unsigned int c = 0;
- while(i < e + 1){
- c = c + (N[i]*pov(2,E));
- i++;
- E--;
- }
- return c;
- }
- int valid_ip(char s[]) {
- int i = 0;
- int j = 0;
- int a = 0;
- int r,k,R,p;
- r = conta_punti(s);
- /* Controllo per vedere se il numero di punti all'interno della stringa è valido */
- if(r != 3){
- return 0;
- }
- while(s[i] != '\0'){
- if(s[i] == '.'){
- /* Se il punto è in posizione 0 */
- if(i == 0){
- return 0;
- }
- k = i - j;
- p = j - 1;
- while(k < i){
- /* Controllo se una cifra è un numero */
- if(s[k] < '0' || s[k] > '9'){
- return 0;
- }
- R = s[k] - '0';
- a = a + (R*pot(p));
- p--;
- k++;
- }
- if(a > 255){
- return 0;
- }
- a = 0;
- j = -1;
- }
- if(s[i] != '.' && s[i + 1] == '\0'){
- k = i - j;
- p = j;
- while(k < i+1){
- if(s[k] < '0' || s[k] > '9'){
- return 0;
- }
- R = s[k] - '0';
- a = a + (R*pot(p));
- p--;
- k++;
- }
- if(a > 255){
- return 0;
- }
- a = 0;
- j = -1;
- }
- if((s[i] == '.' && s[i + 1] == '\0') || (s[i] == '.' && s[i + 1] == '.')){
- return 0;
- }
- j++;
- i++;
- }
- return 1;
- }
- unsigned int ip2int(char ip[]) {
- int N[31] = {0};
- int i = 0;
- int j = 0;
- int a = 0;
- int c = 7;
- int k,R,p;
- int e = 31;
- unsigned int f;
- while(ip[i] != '\0'){
- if(ip[i] == '.'){
- k = i - j;
- p = j - 1;
- while(k < i){
- R = ip[k] - '0';
- a = a + (R*pot(p));
- p--;
- k++;
- }
- bin(a,N,c);
- c = c + 8;
- a = 0;
- j = -1;
- }
- if(ip[i] != '.' && ip[i + 1] == '\0'){
- k = i - j;
- p = j;
- while(k < i+1){
- R = ip[k] - '0';
- a = a + (R*pot(p));
- p--;
- k++;
- }
- bin(a,N,c);
- c = c + 8;
- a = 0;
- j = -1;
- }
- j++;
- i++;
- }
- f = conv_bin(N,e);
- return f;
- }
- char ip_class(char ip[]) {
- int N[7] = {0};
- int i = 0;
- int j = 0;
- int a = 0;
- int c = 7;
- int k,R,p;
- while(ip[i] != '\0'){
- if(ip[i] == '.'){
- k = i - j;
- p = j - 1;
- while(k < i){
- R = ip[k] - '0';
- a = a + (R*pot(p));
- p--;
- k++;
- }
- bin(a,N,c);
- ip[i + 1] = '\0';
- }
- i++;
- j++;
- }
- if(N[0] == 0)
- return 'A';
- if(N[0] == 1 && N[1] == 0)
- return 'B';
- if(N[0] == 1 && N[1] == 1 && N[2] == 0)
- return 'C';
- if(N[0] == 1 && N[1] == 1 && N[2] == 1 && N[3] == 0)
- return 'D';
- if(N[0] == 1 && N[1] == 1 && N[2] == 1 && N[3] == 1)
- return 'E';
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement