недопустимое преобразование из "const char *" в "uint32_t {aka unsigned int}" [-fpermissive] - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь проверить, находится ли IP-адрес в диапазоне, выполнив операцию и с маской сети, этот код выдает мне следующую ошибку:

invalid conversion from ‘const char*’ to ‘uint32_t {aka unsigned int}’ [-fpermissive]

Я новичок в C ++, есть ли какое-либо решение для этого?

int main() {
    uint32_t ip = "192.168.2.1"; 
    // value to check 
    uint32_t netip = "192.168.2.0"; // network ip to compare with 
    uint32_t  netmask = "255.255.255.0"; // network ip subnet mask
    if (  (netip & netmask) == (ip & netmask)) {
        // is on same subnet... 
        std::cout << "On the same subnet" << std::endl;
    } else {
        // not on same subnet... 
        std::cout << "Not on the same subnet" << std::endl;
    }
}

1 Ответ

0 голосов
/ 16 июня 2019

Проблема в этих строках

uint32_t ip = "192.168.2.1"; // value to check
uint32_t netip = "192.168.2.0"; // network ip to compare with
uint32_t netmask = "255.255.255.0"; // network ip subnet mask

Нельзя назначать строковые литералы целочисленным переменным.Вам необходимо разобрать содержимое строковых литералов в их числовые эквиваленты.Для этого вы можете использовать функцию API сокета, например inet_addr(), например:

uint32_t ip = inet_addr("192.168.2.1"); // value to check
uint32_t netip = inet_addr("192.168.2.0"); // network ip to compare with
uint32_t netmask = inet_addr("255.255.255.0"); // network ip subnet mask
...