Не могу получит ключ с QMap

256
09 мая 2017, 06:09

Сравниваю containce в QMap показывает ключ есть:

if(!(ctrl->mapIp.contains(ctrl->connectAddr.toIPv4Address())))
        return;

Перебираю в цикле QMap, вытаскиваю ключ, но он не равен реальному ключу. Почему так? Как мне вытащить ключ?

 QMap<qint32, ClientInfo*>::iterator it = ctrl->mapIp.begin();
    for(;it!=ctrl->mapIp.end();it++) {
        qDebug() <<"ctrl->connectAddr1=" <<ctrl->connectAddr.toIPv4Address();
        qDebug() <<"i1=" <<it.key();
    }

Вывод:

ctrl->connectAddr1= 3232235620
i1= -1062731676
Answer 1

если сложить 3232235620 и 1062731676 (без минуса), то будет 4294967296, то в хексе это будет ровно 0x100000000, что как бы должно уже намекнуть.

Расширим. Эти два числа - это одно и тоже число, просто в первом случае считаем, что там беззнаковое, а в втором - знаковое. Ключ в мапе у Вас qint32, а функция toIPv4Address имеет следующую сигнатуру quint32 toIPv4Address() const.

Как бы я исправил? - поменял бы в определении тип. То есть, мапу объявлял так

QMap<quint32, ClientInfo*> mapIp;
READ ALSO
Мигание картинки на canvas

Мигание картинки на canvas

Добрый день, в процессе написании игры столкнулся с такой проблемой

349
Сумма одного значения в объекте jquery

Сумма одного значения в объекте jquery

Как мне посчитать всю сумму значения value? А то есть сложить данные value из всех 3 объектов

334