52 lines
1.0 KiB
C
52 lines
1.0 KiB
C
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;
|
|
}
|
|
|