QString в qint16

#qt

Вопрос:

Я пытаюсь преобразовать a QString в a qint16 с помощью

 udpListenPort = ui->lineEdit_UdpListenPort->text().toShort();
 

но это превращается "40690" в 0 .

Я пробовал разные приведения и преобразования, но ни то, ни другое не работает. Мне кажется, я не вижу леса за деревьями здесь.

Ответ №1:

Максимальное значение a qint16 (которое typedef short qint16; /* 16 bit signed */ может содержать a) — 32767 с использованием дополнения two, следовательно, переполнение «40690» и переполнение целых чисел со знаком-это неопределенное поведение.

Используйте quint16 вместо этого (что является a typedef unsigned short quint16; /* 16 bit unsigned */ ) и ushort QString::toUShort(bool *ok = nullptr, int base = 10) const .

Ответ №2:

Вы прошли большую часть пути, просто измените тошорт() на Тошорт (), чтобы исправить это.

 udpListenPort = ui->lineEdit_UdpListenPort->text().toUShort();
 

quint16 это просто typedef для короткого без знака.

Комментарии:

1. Использование этого 40690 преобразуется в -24844, поскольку qint16 перетекает, как указал @Fryz.