Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Август 15, 2013, 10:23



Название: Формат данных
Отправлено: demaker от Август 15, 2013, 10:23
Скажите.
Как сделать так, что информацию, которую я набиваю в QLineEdit
была представлена в hex.
Т.е. 1 в строковом формате -> переводилась как 1 hex.


Название: Re: Формат данных
Отправлено: voral от Август 15, 2013, 11:11
Скажите.
Как сделать так, что информацию, которую я набиваю в QLineEdit
была представлена в hex.
Т.е. 1 в строковом формате -> переводилась как 1 hex.
Не совсем понятно задача. А если 10 введено? 
Если я правильно понял. Вам хочется введеное в инпут десятично число отобразить в 16ричном виде?
Тогда несколько наводок:
Код:
qint16 t = youtrlineedit.text().toInt();  // вот мы превратили строку в число
// здесь стоит обработать ошибку если в стоке было не число (читаем доку по toInt)
qDebug() << t << QString("Введено %1 это '%2' в хексе").arg(t).arg(t, 0, 16); // а вот текст и представление числа в 16-ричной системе


Название: Re: Формат данных
Отправлено: demaker от Август 15, 2013, 11:23
только чтобы этот 16-ричный код можно было запихнуть в порт
типа
пишем B lineEdit:
10 00 8f 8f  16
и это в хексе уходит в порт.
Код:
QByteArray data;
port->write(data,data.size());


Название: Re: Формат данных
Отправлено: LisandreL от Август 15, 2013, 11:54
Код
C++ (Qt)
QString text = lineEdit1->text();
text.remove(" ");
QByteArray data = QByteArray::fromHex(text.toAscii());
port->write(data,data.size());


Название: Re: Формат данных
Отправлено: demaker от Август 15, 2013, 12:18


Код
C++ (Qt)
QString text = lineEdit1->text();
text.remove(" ");
QByteArray data = QByteArray::fromHex(text);
port->write(data,data.size());
И что это будет
Пишем посылку:
10 20 30
А в итоге
102030 переведет в hex
В итоге неправильно все будет


Название: Re: Формат данных
Отправлено: voral от Август 15, 2013, 12:28
Сдается какието задачи решают. НА cyberforum.ru дали ответ на подобны вопрос. (пользователь l_a_m)
Код:
QString str = QString("0x01 0x40 0x55 0x66");
QByteArray b;
foreach(const QString & item, str.split(" ") {
  bool isOk = false;
  int data = tem.toInt(&isOk, 16);
  if (true == isOk) {
     b.append(data);
  }
}


Название: Re: Формат данных
Отправлено: Bepec от Август 15, 2013, 13:07
demaker - сплить перед использованием fromHex. И каждую часть переводи в hex. Тогда будет тебе счастье.


Название: Re: Формат данных
Отправлено: LisandreL от Август 15, 2013, 14:59
И что это будет
Пишем посылку:
10 20 30
А в итоге
102030 переведет в hex
В итоге неправильно все будет
Будет
data[0]==16==0x10
data[1]==32==0x20
data[2]==48==0x30

Если вам нужно не это, то объясняйте понятнее, что вам нужно. Можно с примерами.


Название: Re: Формат данных
Отправлено: Majestio от Август 20, 2013, 11:01
только чтобы этот 16-ричный код можно было запихнуть в порт
типа
пишем B lineEdit:
10 00 8f 8f  16
и это в хексе уходит в порт.
Код:
QByteArray data;
port->write(data,data.size());

В порт уходит не в хексе, в порт уходит в байтах)).
Потому задача более другая ... перевести QString в QByteArray с учетом смены системы исчисления.

ИМХО, алгоритм должен быть примерно следующим:

1) Введенную строку сплитим на "строки-числа"
2) В цикле преобразуем "строки-числа" из п.1 в байты и загружаем их в QByteArray с учетом системы исчисления
3) Загоняем результат в порт

ЗЫ: Следует иметь ввиду, что запись в порт нужно делать не указателя QByteArray-переменной, а брать ссылку на массив данных посредством:

char * QByteArray::data ()