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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Получение данных из QLineEdit  (Прочитано 7458 раз)
kruft
Гость
« : Май 21, 2014, 09:08 »

День добрый!

В QLineEdit пользователь вводит число в шестнадцатеричке, необходимо преобразовать строку в число,а затем преобразовать число в массив типа char.
Пытался вот так, но не выходит.
   
Код:
    QString inval = ui->inputLINE->text();
    quint32 val = inval.toUInt(NULL, 16);
    QByteArray ba = inval.toLocal8Bit();
    qDebug() << ba[0];
   
Записан
OKTA
Гость
« Ответ #1 : Май 21, 2014, 09:22 »

Код:
char * QByteArray::data ()
Returns a pointer to the data stored in the byte array. The pointer can be used to access and modify the bytes that compose the array. The data is '\0'-terminated, i.e. the number of bytes in the returned character string is size() + 1 for the '\0' terminator.

const char * QByteArray::constData () const
Returns a pointer to the data stored in the byte array. The pointer can be used to access the bytes that compose the array. The data is '\0'-terminated unless the QByteArray object was created from raw data. The pointer remains valid as long as the byte array isn't reallocated or destroyed.
This function is mostly useful to pass a byte array to a function that accepts a const char *.
Note: A QByteArray can store any byte values including '\0's, but most functions that take char * arguments assume that the data ends at the first '\0' they encounter.
Записан
kruft
Гость
« Ответ #2 : Май 21, 2014, 09:33 »

И как в итоге должно получиться? С учётом того, что пользователь вводит например 1020 и это должно восприниматься как 0x10, 0x20 в массиве.
Записан
OKTA
Гость
« Ответ #3 : Май 21, 2014, 10:26 »

Вы уж определитесь, что вам нужно, а то в первом сообщении одно, в коде другое, а теперь третье..
Чтобы в массиве лежали 0x10 и 0x20, надо отдельно эти 0х10 и 0х20  добавлять. Например через .append(0x20). Сразу добавить 1020 в массив не получится. Точнее получится, но сохранится только первый байт из всего числа.
Записан
kruft
Гость
« Ответ #4 : Май 21, 2014, 10:33 »

Т.е. если пользователь ввёл например 10203040, то разбить строку на 0x10, 0x20, 0x30, 0x40 сразу никак не получится?
Ну допустим перед разбиением конвертируем через toUint(NULL, 16). Т.е. как будет выглядеть код если на входе 10203040, а на выходе нужен массив 0x10, 0x20...
Записан
OKTA
Гость
« Ответ #5 : Май 21, 2014, 10:54 »

Сначала разбей строку(типа "10203040") на подстроки ("10", "20", "30", "40"), переведи каждую в int и добавляй в массив.
Записан
kruft
Гость
« Ответ #6 : Май 21, 2014, 11:05 »

А как проще всего сделать разбиение на подстроки?
Записан
carrygun
Гость
« Ответ #7 : Май 21, 2014, 11:12 »

Очевидно что boost::spirit.
Записан
OKTA
Гость
« Ответ #8 : Май 21, 2014, 11:26 »

 Непонимающий я конечно все понимаю, но пройтись по строке и выцеплять символы по паре можно без всяких духов  Смеющийся Смеющийся
Код:
QString dataString("10245634f");
    QStringList list;
    int i = 0;
    QString tmpString;
    while(0 != (tmpString = dataString.mid(i, 2))) {
        //

        list.append(tmpString);
        i +=2;
    }
Записан
carrygun
Гость
« Ответ #9 : Май 21, 2014, 11:51 »

Использовать QString сейчас не профессионально, ходят слухи, что даже не законно.
Записан
OKTA
Гость
« Ответ #10 : Май 21, 2014, 11:54 »

Предъявите ваши доказательства  Смеющийся
Записан
kruft
Гость
« Ответ #11 : Май 21, 2014, 11:55 »

Был бы какой-нить разделитель было бы просто очень. А так спасибо сделаю. Только мне придётся сначала строку конвертировать в uint,а потом уже с ней работать, чтобы hex был hex.
Записан
kruft
Гость
« Ответ #12 : Май 21, 2014, 12:28 »

А ещё вопрос. Т.е. массив типа string получен, как его преобразовать в массив типа QByteArray?
Записан
OKTA
Гость
« Ответ #13 : Май 21, 2014, 12:29 »

А чем аргументирован отказ от QString в пользу std::string?
Записан
kruft
Гость
« Ответ #14 : Май 21, 2014, 12:38 »

В полученном массиве будут лежать при вводе 1A1B1C не числа 0x1A, 0x1B, а значения ASCII символов?
Код:
QByteArray out_val;
foreach (QString str, list) {
            uint value = str.toUInt(NULL, 16);
            out_val = (quint8)value;
        }
Не получается перевести в char каждую строчку
« Последнее редактирование: Май 21, 2014, 12:40 от kruft » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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