
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