Примерно так
Код
unsigned long str_to_IP(unsigned char *ptr)
{ unsigned long result = 0;
unsigned int idx = 0, sum = 0;
for (;;)
{ if (ptr[idx] != '\0')
{ if (ptr[idx] != '.')
{ sum *= 10U;
sum += (ptr[idx]-'0');
}
else
{ result |= sum;
result <<= 8UL;
sum = 0;
}
}
else
{ result |= sum;
break;
}
idx++;
}
return (result);
}
Обратный перевод аналогично. Берем старший байт. Делим на 10. Берем остаток от деления - получили разряд единиц. Еще раз делим на 10 - получили разряд десятков. То что осталось - в разряд сотен. Далее запись символа точка ('.'). Берем следующий байт ... и т.д. Перед записью в строку не забываем прибавляем символ нуля ('0');