#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.