#include 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; }