char temp[] = "192.168.190.160";
unsigned result = (((((192u<<8)|168u)<<8)|190u)<<8)|160u;

int strtoul1(const char *a, char **b, int c) __attribute__((noinline, noclone));
int strtoul1(const char *a, char **b, int c)
{
  *b = a+3;
  if (a == temp)
    return 192;
  else if (a == temp+4)
    return 168;
  else if (a == temp+8)
    return 190;
  else if (a == temp+12)
    return 160;
  __builtin_abort();
}

int string_to_ip(const char *s) __attribute__((noinline,noclone));
int string_to_ip(const char *s)
{
        int addr;
        char *e;
        int i;

        if (s == 0)
                return(0);

        for (addr=0, i=0; i<4; ++i) {
                int val = s ? strtoul1(s, &e, 10) : 0;
                addr <<= 8;
                addr |= (val & 0xFF);
                if (s) {
                        s = (*e) ? e+1 : e;
                }
        }

        return addr;
}

int main(void)
{
  int t = string_to_ip (temp);
  printf ("%x\n", t);
  printf ("%x\n", result);
  if (t != result)
    __builtin_abort ();
  printf ("WORKS.\n");
  return 0;
}
