ipv4地址向int型轉換,int型數據向ipv4轉換。


  將一個ip地址格式的字符串轉換為一個int型(4字節32位)的數據。例如 char *p = "192.168.001.001"; 

  函數實現如下:

int ipv4_to_int(char *ip)
{
    int tmp = 0;
    char ip1, ip2, ip3, ip4;

    ip1 = atoi(ip);
    ip = strchr(ip, '.');
    if(!ip)
        return -1;
    ip2 = atoi(++ip);
    ip = strchr(ip, '.');
    if(!ip)
        return -1;
    ip3 = atoi(++ip);
    ip = strchr(ip, '.');
    if(!ip)
        return -1;
    ip4 = atoi(++ip);

    tmp |= ip4 & 0xff;
    tmp = (tmp << 8) | (ip3 & 0xff);
    tmp = (tmp << 8) | (ip2 & 0xff);
    tmp = (tmp << 8) | (ip1 & 0xff);

    return tmp;
}

  打印tmp值為0101a8c0。其中c0在低地址(主機小端結構)。

  將一個int型ip地址轉換為ipv4的結構,使用如下的函數實現。

void int_to_ipv4(int tmp, char *ip)
{
    unsigned short ip1, ip2, ip3, ip4;
    ip1 = tmp & 0xff;
    ip2 = (tmp >> 8) & 0xff;
    ip3 = (tmp >> 16) & 0xff;
    ip4 = (tmp >> 24) & 0xff;
    sprintf(ip, "%03d.%03d.%03d.%03d", (int)ip1, (int)ip2, (int)ip3, (int)ip4);
}

  將上個數據信息轉換成ipv4后,結果為192.168.001.001。

  通過判斷一個字符串中是否有三個點來判斷該字符串是否為一個ipv4字符串,同樣也可以對字符串的合法性進行檢查。當然那可以在判斷具有. . .這樣的結構后進行判斷每個參數是否超出255來判斷是否合法。

int isipv4Str(char *buffer){
    char *p;
    int count = 0;
    p = strstr(buffer, ".");

    while(p != NULL){
        count++;
        p = strstr(p+1, ".");
    }
    if(count == 3){
        return 1;
    } else {
        return 0;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM