Название: Перевести из QString в unsigned char Отправлено: ADA от Июнь 29, 2011, 21:22 Доброго времени суток.
Пишу простенький парсер данных, вводимых пользователем в форму. Данные считываю в переменную типа QString , далее вылавливаю нужные позиции из массива (это числа в hex коде). Далее мне необходимо побайтно засунуть их в массив и посчитать контрольную сумму. За основу брал проект, в котором считал CRC из массива unsigned char-ов. Хотел не меняя функцию втулить туда массив байтов ( компилятор ругается все время), но почему-то на всех форумах находил конвертацию только из QString в char *. То-ли я что-то не понимаю? Возможно ли преобразовать QString именно в unsigned char? Тест программы выложу завтра. Название: Re: Перевести из QString в unsigned char Отправлено: kambala от Июнь 29, 2011, 21:26 в unsigned char можно отдельные символы преобразовывать, а никак не строку :)
Название: Re: Перевести из QString в unsigned char Отправлено: ADA от Июнь 29, 2011, 22:17 Для примера: у меня набор данных = 0xf3,0x3d и т.д. Мне нужно проанализировать строку...выкинуть запятые, пробелы и префикс 0x естественно, а вот f3, 3d - перевести в char и совершать над ними операции, как над обычным числом.
Название: Re: Перевести из QString в unsigned char Отправлено: kambala от Июнь 29, 2011, 22:46 если в строке запятые и пробелы расставлены случайным образом (например бывают строки вида "0х2,0х34 0х545, 0х31"), то разбиваешь строку на список чисел:
Код (если формат точно известен, то регэкс не нужен - просто пишешь строку-разделитель), а потом проходишь по элементам списка и преобразовываешь их в числа: Код
Название: Re: Перевести из QString в unsigned char Отправлено: ADA от Июнь 30, 2011, 09:11 Спасибо. Записал =
Код: ushort s_rch[10]; В s_rch - записываются нужные данные. Теперь возникла другая проблема. CRC у меня считается через указатели (передрано с wikipedia :D) = Код: unsigned char crc8Res( unsigned char *data , unsigned int len ) Как же быть в такой ситуации? Название: Re: Перевести из QString в unsigned char Отправлено: LisandreL от Июнь 30, 2011, 09:24 Так вот проблема в том, что указатель ushort* не соответствует типу указателся unsigned char* reinterpret_cast?Название: Re: Перевести из QString в unsigned char Отправлено: ddrtn от Июнь 30, 2011, 10:11 Не надо так делать. не поймут-с. QString - это шибко высокоуровневый инструмент. не нужно обращаться к его внутреннему представлению символов. Для этих целей существует QByteArray. Для преобразования QByteArray в QString существует много специальных функций, решающих эту задачу в зависимости от выбранной кодировки (например, QString::toLocal8Bit()).
А с QByteArray сабж решается просто: Код: QByteArray ba; Название: Re: Перевести из QString в unsigned char Отправлено: ADA от Июнь 30, 2011, 10:45 Я записал вот так.
Код:
Название: Re: Перевести из QString в unsigned char Отправлено: LisandreL от Июнь 30, 2011, 10:59 Не надо так делать. не поймут-с. QString - это шибко высокоуровневый инструмент. Вопрос был про ushort* => unsigned char*.Что-то у меня через cast не получилось передать нужные указатели. Ткните пальцем как надо? При беглом просмотре ошибки не вижу. Вы уверены, что передаётся не то?Название: Re: Перевести из QString в unsigned char Отправлено: ddrtn от Июнь 30, 2011, 11:09 Вопрос был про ushort* => unsigned char*. Прошу прощения, не прочитал одно сообщение.Название: Re: Перевести из QString в unsigned char Отправлено: ADA от Июнь 30, 2011, 13:08 Что-то у меня через cast не получилось передать нужные указатели. Ткните пальцем как надо? При беглом просмотре ошибки не вижу. Вы уверены, что передаётся не то?Название: Re: Перевести из QString в unsigned char Отправлено: LisandreL от Июнь 30, 2011, 13:27 Ну, логично, ushort в данном случае двухбайтовый. Но это же только вы можете знать, что вам нужно.
Если этого не нужно объявите s_rch и n как quint8 или unsigned char. Название: Re: Перевести из QString в unsigned char Отправлено: kambala от Июнь 30, 2011, 13:41 если нужно просто посчитать контрольную сумму, то может подойдёт функция qChecksum (CRC-16)? или нужно именно по какому-то определённому алгоритму?
Название: Re: Перевести из QString в unsigned char Отправлено: LisandreL от Июнь 30, 2011, 13:45 если нужно просто посчитать контрольную сумму, то может подойдёт функция qChecksum (CRC-16)? или нужно именно по какому-то определённому алгоритму? Ещё есть QCryptographicHash::hash - Md4, Md5 или Sha1.Название: Re: Перевести из QString в unsigned char Отправлено: Igors от Июнь 30, 2011, 14:21 Так вот проблема в том, что указатель ushort* не соответствует типу указателся unsigned char*/ Меньше передирать :) Пытаться думать и что-то сделать самому. Если Вам обязательно нужно "crc как в Wiki", то так Как же быть в такой ситуации? Код А если просто/любое CRC, то хотя бы так Код В руках kambala все высокоуровневые штучки (RegExp. splt. foreach и.т.п.) будут прекрасно работать :) Но когда Вы их передираете - первая "своя" строка оказывается ошибкой, напр Код: ushort s_rch[10]; Код и избавьтесь от inc А можно действовать и "как на С" (что мне лично нравится больше). Извлекаете из UI С строку. напр так Код И работаете с этой строкой напр с помощью прекрасной ф-ции strtol, которая на порядок-два быстрее всего отого "модерна" Название: Re: Перевести из QString в unsigned char Отправлено: ADA от Июнь 30, 2011, 14:24 Да...там особый полином. нестандартный. Хотя в сторону готовых функция тоже погляжу. А так в общем с типами разобрался.
Всем спасибо за советы и ответы. |