Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: SpaceRabbit от Сентябрь 11, 2012, 15:41



Название: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 15:41
Помогите пожалуйста совсем начинающему,
если вкратце, то в QLineEdit вводится закодированный текст (HEX), перегоняется в asci и в итоге помещается в QByteArray, вытаскиваю оттуда число вида "0450" и мне нужно сравнить его с заданным диапазоном чисел, как лучше всего это сделать? Диапозон числ: 0200 - 4000, шаг 10. Проблема в том, что я не знаю, как в вектор поместить числа с нулем в начале, и как потом сравнить..
т.е. число из массива qbMessage.mid(pos+1, 4) нужно сравнить с диапазоном


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: mutineer от Сентябрь 11, 2012, 15:50
"0450" - это число или строка? Если строка, то проблемы не понял, если число, то тем более


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 16:25
"0450" - это число или строка? Если строка, то проблемы не понял, если число, то тем более
ну получается это последовательность байтов массива QByteArray, возвращаю функцией
Код:
QByteArray QByteArray::mid ( int pos, int len = -1 ) const

А ка вектор то заполнить так QVector(0200, 0210, 0220, 0230,...


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: mutineer от Сентябрь 11, 2012, 16:33
Не понял что тебе надо


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 16:44
Не понял что тебе надо
я уже сам запутался..

в QLineEdit ввожу строку (последовательность кодов в hex, типа "30 34 30 35...")

Код:
//сохраняю строку из QLineWdit в массив QByteArray 
QByteArray ByteMes = pMessage->text().toAscii();
QByteArray AsciiMes = QByteArray::fromHex(ByteMes);

//нахожу позицию начала числа в строке (pos)
...

// затем в AsciiMes нахожу это 4-х значное число по позиции pos
AsciiMes.mid(pos, 4)

//можно и в int сохранить, но оно будет без '0' в начале..т.е. просто 450, а не 0450
int freq = AsciiMes.mid(pos, 4).toInt();

//теперь мне это число надо сравнить с диапазоном чисел 0200 - 2000 с шагом 10


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: mutineer от Сентябрь 11, 2012, 17:12
А чем принципиально int со значением 450 отличается от int со значением 0450? (мы же про десятичное значение?)

и чем сравнение с 0200 - 2000 отличается от сравнения 200 - 2000? (опять же, если это десятичные значения)


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 17:36
А чем принципиально int со значением 450 отличается от int со значением 0450? (мы же про десятичное значение?)

и чем сравнение с 0200 - 2000 отличается от сравнения 200 - 2000? (опять же, если это десятичные значения)
по условию, код вводится по-байтово, для это числа отводится 4 байта, ТО, если я уберу "0" из строки ввода(значение 30), то я ввожу грубо говоря не ту информацию


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: mutineer от Сентябрь 11, 2012, 17:38
Я ж не про ввод. Вот взял ты ввод, перевел его в int и получил значение 450. Что в этом неправильно?


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: Serr500 от Сентябрь 11, 2012, 21:01
Проблема в том, что я не знаю, как в вектор поместить числа с нулем в начале, и как потом сравнить..
Код:
QByteArray::append('\0');

Я ж не про ввод. Вот взял ты ввод, перевел его в int и получил значение 450. Что в этом неправильно?
Преподаватель погрозил пальчиком и сказал, что это неправильно.  ;)


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: Bepec от Сентябрь 11, 2012, 21:07
Простой ответ - обёртывать получаемые int'ы и приводить их к нужному тебе виду.

Аля 450(int) => "450"(QString) => if(size<4) => prepend("0") :)


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 22:55
Цитировать
Преподаватель погрозил пальчиком и сказал, что это неправильно.  
да нет, универ уже закончил))

у меня новый вопрос, как сделать ограничение на ввод только hex в поле?
делаю так, но пробелы не поставить..
Код:
     QRegExp rx("(0x([0-9A-F]{1,2}))+");
     QValidator *validator = new QRegExpValidator(rx, pMessage);
     pMessage->setValidator(validator);


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: Bepec от Сентябрь 11, 2012, 23:03
Маску задавай.


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: mutineer от Сентябрь 11, 2012, 23:09
Добавь в регексп после двух цифр один пробел


Название: Re: Как поместить 4-х значные числа с нулем вначале в вектор?
Отправлено: SpaceRabbit от Сентябрь 11, 2012, 23:31
Добавь в регексп после двух цифр один пробел
спасибо, получилось, а вот через маску нет, можно пример?