1char temp[] = "192.168.190.160"; 2unsigned result = (((((192u<<8)|168u)<<8)|190u)<<8)|160u; 3 4int strtoul1(const char *a, char **b, int c) __attribute__((noinline, noclone)); 5int strtoul1(const char *a, char **b, int c) 6{ 7 *b = a+3; 8 if (a == temp) 9 return 192; 10 else if (a == temp+4) 11 return 168; 12 else if (a == temp+8) 13 return 190; 14 else if (a == temp+12) 15 return 160; 16 __builtin_abort(); 17} 18 19int string_to_ip(const char *s) __attribute__((noinline,noclone)); 20int string_to_ip(const char *s) 21{ 22 int addr; 23 char *e; 24 int i; 25 26 if (s == 0) 27 return(0); 28 29 for (addr=0, i=0; i<4; ++i) { 30 int val = s ? strtoul1(s, &e, 10) : 0; 31 addr <<= 8; 32 addr |= (val & 0xFF); 33 if (s) { 34 s = (*e) ? e+1 : e; 35 } 36 } 37 38 return addr; 39} 40 41int main(void) 42{ 43 int t = string_to_ip (temp); 44 printf ("%x\n", t); 45 printf ("%x\n", result); 46 if (t != result) 47 __builtin_abort (); 48 printf ("WORKS.\n"); 49 return 0; 50} 51 52