Russian Qt Forum
Сентябрь 30, 2024, 18:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поместить 4-х значные числа с нулем вначале в вектор?  (Прочитано 5339 раз)
SpaceRabbit
Гость
« : Сентябрь 11, 2012, 15:41 »

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

"0450" - это число или строка? Если строка, то проблемы не понял, если число, то тем более
Записан
SpaceRabbit
Гость
« Ответ #2 : Сентябрь 11, 2012, 16:25 »

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

А ка вектор то заполнить так QVector(0200, 0210, 0220, 0230,...
Записан
mutineer
Гость
« Ответ #3 : Сентябрь 11, 2012, 16:33 »

Не понял что тебе надо
Записан
SpaceRabbit
Гость
« Ответ #4 : Сентябрь 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
« Последнее редактирование: Сентябрь 11, 2012, 16:56 от SpaceRabbit » Записан
mutineer
Гость
« Ответ #5 : Сентябрь 11, 2012, 17:12 »

А чем принципиально int со значением 450 отличается от int со значением 0450? (мы же про десятичное значение?)

и чем сравнение с 0200 - 2000 отличается от сравнения 200 - 2000? (опять же, если это десятичные значения)
Записан
SpaceRabbit
Гость
« Ответ #6 : Сентябрь 11, 2012, 17:36 »

А чем принципиально int со значением 450 отличается от int со значением 0450? (мы же про десятичное значение?)

и чем сравнение с 0200 - 2000 отличается от сравнения 200 - 2000? (опять же, если это десятичные значения)
по условию, код вводится по-байтово, для это числа отводится 4 байта, ТО, если я уберу "0" из строки ввода(значение 30), то я ввожу грубо говоря не ту информацию
Записан
mutineer
Гость
« Ответ #7 : Сентябрь 11, 2012, 17:38 »

Я ж не про ввод. Вот взял ты ввод, перевел его в int и получил значение 450. Что в этом неправильно?
Записан
Serr500
Гость
« Ответ #8 : Сентябрь 11, 2012, 21:01 »

Проблема в том, что я не знаю, как в вектор поместить числа с нулем в начале, и как потом сравнить..
Код:
QByteArray::append('\0');

Я ж не про ввод. Вот взял ты ввод, перевел его в int и получил значение 450. Что в этом неправильно?
Преподаватель погрозил пальчиком и сказал, что это неправильно.  Подмигивающий
Записан
Bepec
Гость
« Ответ #9 : Сентябрь 11, 2012, 21:07 »

Простой ответ - обёртывать получаемые int'ы и приводить их к нужному тебе виду.

Аля 450(int) => "450"(QString) => if(size<4) => prepend("0") Улыбающийся
Записан
SpaceRabbit
Гость
« Ответ #10 : Сентябрь 11, 2012, 22:55 »

Цитировать
Преподаватель погрозил пальчиком и сказал, что это неправильно.  
да нет, универ уже закончил))

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

Маску задавай.
Записан
mutineer
Гость
« Ответ #12 : Сентябрь 11, 2012, 23:09 »

Добавь в регексп после двух цифр один пробел
Записан
SpaceRabbit
Гость
« Ответ #13 : Сентябрь 11, 2012, 23:31 »

Добавь в регексп после двух цифр один пробел
спасибо, получилось, а вот через маску нет, можно пример?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 21.