개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.13 19:54

ip2long 함수 사용시 오류 해결 방법

목록
  • 반응형디자인매니아 오래 전 2025.06.13 19:54
  • 96
    1
저는 현재 C++ 프로그래밍을 공부 중입니다.
ip2long 함수를 사용하여 IP 주소를 LONG 타입으로 변환해 보았는데,
입력 IP 주소가 255.255.255.255 인 경우 LONG 타입으로 변환시 0이 출력되는 것을 확인했습니다.
이유가 무엇이며, 이 경우 LONG 타입으로 변환시 0이 출력되지 않도록 해결 방법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    ip2long 함수는 IP 주소를 LONG 타입으로 변환하는 함수입니다. 이 함수는 IP 주소를 32비트 정수로 변환하기 때문에, 255.255.255.255는 2^32 - 1 인 4294967295로 변환됩니다. LONG 타입은 32비트 정수이기 때문에, 4294967295를 LONG 타입으로 변환하면 0이 출력됩니다.

    이 문제를 해결하기 위해서는 LONG 타입의 범위를 벗어나는 값을 변환하지 않는 것입니다. LONG 타입의 범위는 -2147483648에서 2147483647입니다. 따라서, 255.255.255.255를 LONG 타입으로 변환하면 LONG 타입의 범위가 벗어나는 4294967295가 LONG 타입으로 변환되지 않습니다.

    따라서, LONG 타입으로 변환하기 전에 IP 주소를 32비트 정수로 변환한 후, LONG 타입의 범위가 벗어나는지 확인하고, 벗어나면 LONG 타입으로 변환하지 않도록 해야 합니다.

    예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    cpp
    
    #include 
    
    #include 
    
    
    
    uint32_t ip2long(const char* ip) {
    
        uint32_t result = 0;
    
        for (int i = 0; i < 4; i++) {
    
            uint32_t part = 0;
    
            char c;
    
            while ((c = *ip++) != '.') {
    
                part = (part << 3) + (part << 1) + c - '0';
    
            }
    
            result = (result << 8) + part;
    
        }
    
        return result;
    
    }
    
    
    
    int main() {
    
        const char* ip = "255.255.255.255";
    
        uint32_t longValue = ip2long(ip);
    
        if (longValue > INT_MAX) {
    
            std::cout << "LONG 타입의 범위가 벗어납니다." << std::endl;
    
        } else {
    
            std::cout << "LONG 타입으로 변환: " << longValue << std::endl;
    
        }
    
        return 0;
    
    }
    
    


    이 코드는 IP 주소를 32비트 정수로 변환하고, LONG 타입의 범위가 벗어나는지 확인합니다. LONG 타입의 범위가 벗어나면 LONG 타입으로 변환하지 않습니다.

    2025-06-13 19:55

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,597건 / 90 페이지

검색

게시물 검색