Название: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 10:18 Всем привет!!!
Возникла следующая задача, связанная с преобразованием данных. Итак, есть переменная в формате "qint32", в которую записывается значение принятое от некоторой железяки, в самой железяке этот параметр находится в формате IEEE 754. Далее, значение преобразуется в строку. Соственно код с комментариями. Код: //Обьявление переменных. Код: Функция связи с "вундер-ваффен", и запись в переменную "ReadRealValue", работает отлично, проблем нет. Код: //Преобразование. Здесь все отлично, Qt - дебагер показывает строку "43F14000", которая полностью соответствует содержимому в памяти железяки. Далее, есть функция которая преобразует данные из QByteArray в строку содержащую число в формате IEEE 754. Я не являюсь ее автором, я нашел ее в интернете, и немного переделал под свои цели. Если кому интересно, вот функция: Код: //Convert Byte array to IEEE 754 Floating point data. Данную функцию я тестировал, работает нормально. Т.е если я обьявляю, к примеру: Код: QByteArray FloatArray("43F14000"); То в QLabel она выдает 482,5 что соответствует действительности. Это было отступление от темы. Теперь мне нужно преобразовать строку HexFloat в QByteArray, для этого я использую следующую функцию: Код: QByteArray.FloatArray = QByteArray::fromHex(HexFloat.toLocal8Bit().constData()); И результат нулевой, при этом проект компилируется без ошибок и предупреждений. И у меня возникает вопрос. Скажите пожалуйста, возможно я упустил какие либо дополнительные параметры при конвертировании? Или возможны какие либо другие способы преобразования QString в QByteArray? Название: Re: Преобразование QString в QByteArray. Отправлено: __Heaven__ от Март 04, 2015, 11:21 А зачем вы используете .constData()?
Название: Re: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 11:31 Согласен, это я поторопился. Я убрал этот параметр. Теперь вот так:
Код: QByteArray.FloatArray = QByteArray::fromHex(HexFloat.toLocal8Bit()); Т.е задача преобразовать строку QString = "43F14000", в QByteArray = 43 F1 40 00. Название: Re: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 11:51 К сожалению это не помогает, любые аргументы форматирования (toLatin1, toAscii) выдают в дебагере "кракозябры".
Название: Re: Преобразование QString в QByteArray. Отправлено: GreatSnake от Март 04, 2015, 12:01 Код
Название: Re: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 12:30 Код
Спасибо большое за помошь. Но к сожалению не помогло. Название: Re: Преобразование QString в QByteArray. Отправлено: __Heaven__ от Март 04, 2015, 12:39 Как насчёт
Код ? Название: Re: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 12:58 Спасибо, но к сожалению тоже не помогло.
В данном случае результат преобразования такой: BFA2661C. В предыдущем варианте соответственно: BF868FAC. В идеале должно быть: 43F14000. Название: Re: Преобразование QString в QByteArray. Отправлено: Bepec от Март 04, 2015, 13:18 Ребят вы что?
QByteArray QByteArray::fromHex(const QByteArray & hexEncoded) Туда не нужно передавать constData. Туда нужно передать именно toLocal8Bit. Код: QString floatArray("43F14000"); Цитировать Отладка запущена "43f14000" PS это то, чего вы хотели? PPS прочитал тему, но так и не нашёл строку HexFloat. Додумался, что это "43F14000". Если я не прав, поправьте и впредь выражайте свои хотелки более прямозначно, без отступлений :) Название: Re: Преобразование QString в QByteArray. Отправлено: Pavel74 от Март 04, 2015, 15:04 Огромное спасибо, разобрался. В следующий раз буду точнее формулировать свои вопросы. Еще раз спасибо.
|