Функция для разбора значения параметра булева типа

// Принимает на входе строку, которая может содержать 1, 0, on, off, yes, no, true, false 
// Возвращает 1 в случае true, 0 - в случае false и -1 в случае, если строка не распознана
//
int parse_boolean_param(char *param_value) {
    int ret = -1;
    unsigned long long like_string = 0;
    char *ptr = (char *)&like_string;
    int size = 0;
// Строки длиннее 8 символов даже не рассматриваем (они не поместятся в long long)
    for (; size < 9; size++) { 
        if (str[size])
            ptr[size] = str[size];
        else 
            break; 
    }
// Самая длинная строка - false. Если строка длинее, это заведомо неверный аргумент
    if (size > 5) return ret;

    // Битовая маска для побитового сложения со строкой (приведение к строчным буквам)
    static const unsigned long long to_lower = 0x2020202020202020;
    // приведение к строчным буквам
    string |= to_lower;

    // Через преобразование строки в число long long (до 8 символов char)
    // Проверялось на Win64 и Linux64
    switch (string) {
    case 2314885530818453553: // 1
    case 2314885530818473583: // on
    case 2314885530823910777: // yes
    case 2314885531981673076: ret = 1; break; // true
    case 2314885530818453552: // 0
    case 2314885530823059055: // off
    case 2314885530818473838: // no
    case 2314885828568703334: ret = 0; break; // false
    default: break;
    }
    return ret;
}