38 lines
1.1 KiB
C
38 lines
1.1 KiB
C
#include <stdlib.h>
|
|
|
|
int ip4_flat(char* value, wchar_t* flat)
|
|
{
|
|
unsigned char value_index = 0;
|
|
unsigned char octet_index = 0;
|
|
unsigned char octet_value = 0;
|
|
char flat_index;
|
|
unsigned char value_chara;
|
|
do {
|
|
value_chara = value[value_index];
|
|
if (value_chara >= '0' && value_chara <= '9') {
|
|
octet_value *= 10;
|
|
octet_value += value_chara - '0';
|
|
} else if (value_chara == '.') {
|
|
for (flat_index = (octet_index+1)*8-1; flat_index >= octet_index*8; flat_index--) {
|
|
flat[flat_index] = '0' + (octet_value & 1);
|
|
octet_value >>= 1;
|
|
}
|
|
octet_index++;
|
|
octet_value = 0;
|
|
} else if (value_chara == '\0') {
|
|
if (octet_index != 3) {
|
|
return 1;
|
|
}
|
|
for (flat_index = 31; flat_index >= 24; flat_index--) {
|
|
flat[flat_index] = '0' + (octet_value & 1);
|
|
octet_value >>= 1;
|
|
}
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
value_index++;
|
|
} while (1); // This ugly thing save one comparison
|
|
return 1;
|
|
}
|