Закодировать и раскодировать IP

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by tester_new, 26 Oct 2013.

  1. tester_new

    tester_new Elder - Старейшина

    Joined:
    12 Feb 2012
    Messages:
    300
    Likes Received:
    45
    Reputations:
    24
    Нужно закодировать IP в число(именно в целое число) к примеру в 5-7 цифр, а затем раскодировать назад. Подскажите какое самое простое решение для данной задачи на C++


    Вот пример моей текущей функции(пишу в mfc)

    Code:
    	
    CString EncryptIP() {
    WSADATA wsa_Data;
    int wsa_ReturnCode = WSAStartup(0x101,&wsa_Data);
    char szHostName[255];
    gethostname(szHostName, 255);
    struct hostent *host_entry;
    host_entry=gethostbyname(szHostName);
    char * szLocalIP;
    szLocalIP = inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list);
    WSACleanup();
    char tmp[32];
    memset(tmp, 0, sizeof(tmp));
    strcpy(tmp,szLocalIP);
    char res[32]; 
    memset(res, 0, sizeof(res));
    int ip_points[3]={0,0,0},c=0;
    for(int i=0; i < strlen(tmp); i++) {
    if(tmp[i] != (char)'.' && tmp[i] != (char)' ') {
    res[c] = tmp[i];
    c++;
    }
    if(tmp[i] == '.') {
    if(!ip_points[0]) {
    ip_points[0] = i;
    continue;
    }
    if(!ip_points[1]) {
    ip_points[1] = i;
    continue;
    }
    if(!ip_points[2]) {
    ip_points[2] = i;
    continue;
    }
    }    
    } 
    memset(tmp, 0, sizeof(tmp));
    return CString(itoa(atoi(res)/100000,tmp,10))+ _T("-")+CString(itoa(ip_points[0],tmp,10))+ _T("-")+CString(itoa(ip_points[1],tmp,10))+_T("-")+CString(itoa(ip_points[2],tmp,10)); 
    }
    
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    гугл -> "ip2long c++"

    PHP:
    long ip2long(charip){ 
        return 
    htonl(inet_addr(ip)); 


    void long2ip(long lchar buf[]){ 
        
    struct in_addr addr
        
    addr.s_addr htonl(l); 
        
    strcpy(bufinet_ntoa(addr)); 
    }
     
    1 person likes this.
  3. tester_new

    tester_new Elder - Старейшина

    Joined:
    12 Feb 2012
    Messages:
    300
    Likes Received:
    45
    Reputations:
    24
    Спасибо.