long ip2long( char *ip )
{
long ip2long = 0;
char B1[4], B2[4], B3[4], B4[4];
int D1, D2, D3, D4 = 0;
sscanf(ip, "%s.%s.%s.%s", B1, B2, B3, B4);
D1 = atoi(B1);
D2 = atoi(B2);
D3 = atoi(B3);
D4 = atoi(B4);
if(D1 > 255 || D2 > 255 || D3 > 255 || D4 > 255)
return 0;
ip2long = D1*256*256*256+D2*256*256+D3*256+D4;
return ip2long;
}
входные данные: 127.1.1.2
Почему D1 == 127, а D2, D3 и D4 == 0?
--- ОБНОВЛЕНИЕ ---
Теперь код
unsigned long ip2long( char *ip )
{
unsigned long ip2long = 0;
unsigned int D1, D2, D3, D4 = 0;
sscanf(ip, "%u.%u.%u.%u", &D1, &D2, &D3, &D4);
if(D1 > 255 || D2 > 255 || D3 > 255 || D4 > 255)
return 0;
ip2long = D1*256*256*256+D2*256*256+D3*256+D4;
return ip2long;
}
Ди в порядке, но есть и другие проблемы: результат для 127.1.1.2 - 2130772226 вместо 2130772225, а для 195.98.157.132 - -1016947324 ...
Почему?
--- Обновление 2 ---
Вот и все,% d прочитал% u.
Kornel Kisielewicz спасибо за сообщение о функции inet_addr:)
PS извините за мой плохой английский = \
Вопрос закрыт.