Russian Qt Forum

Qt => Вопросы новичков => Тема начата: nikeo от Май 22, 2013, 10:24



Название: преобразовать QString к BYTE*
Отправлено: nikeo от Май 22, 2013, 10:24
Добрый день!

Возникла такая ппроблема:
Мне нужно заполнить структуру cert_info,а именно cert_info.SerialNumber, содержит два поля типа DWORD и BYTE*.
То есть,получается так:
Код:
cert_info.SerialNumber.cbData = getSizeOfSerialNumber();//возвращает она размер серийного номера
cert_info.SerialNumber.pbData = (BYTE*)parseSerNum();//возвращает сам серийник в формате char*("\x12\x13" к примеру)

И в итоге, в сертификат безопасности записывается неправельный номер.(
Но если записать так:
Код:
cert_info.SerialNumber.cbData = getSizeOfSerialNumber();
cert_info.SerialNumber.pbData = (BYTE*)"\x12\x13";

то все запишется нормально!в чем может заключаться проблема?


Название: Re: преобразовать QString к BYTE*
Отправлено: Bepec от Май 22, 2013, 10:38
parseSerNum троянский конь. Уверены что он именно то возвращает?


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 22, 2013, 10:49
он возвращает строку типа char*,и ее значение равно тому что нужно,так что да, уверен...а вот значение pbData, тоже равно тому же,хотя и не должно:
при рабочем варианте,оно содержит "****", и их количество зависит от числа в cbData...но если передавать через функцию,то оно содержит именно строку типа "\x..\x..\x..."
Хотя я начинаю думать, что вы от части правы.


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 22, 2013, 11:41
Вот что я понял,простите за "****")))
Если я преобразую строку типа QString к char*, то получаю (скажем если "\x2A\x2A\x2A\x2A"), то получаю именно запись,а мне нужно чтобы они преобразовались в чиловые значения,то есть, на сколько я понимаю, \x2A в таблице ASCII как раз соответствует зведочке.
Как такое можно сделать?

Или как собрать строку,если вводится к примеру "2A 2A 2A 2A" в lineEdit, чтобы получилось именно так?


Название: Re: преобразовать QString к BYTE*
Отправлено: kambala от Май 22, 2013, 11:46
попробуй QString::utf16()


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 27, 2013, 11:50
пробовал,не помогло(


Название: Re: преобразовать QString к BYTE*
Отправлено: thechicho от Май 27, 2013, 12:18
Цитировать
@Idan K: I use (BYTE*)qstring.toUtf8().constData() to put data into DATA_BLOB. I suppose I must use QString::fromUtf8((const char*)datablob.pbData) to get data...


Название: Re: преобразовать QString к BYTE*
Отправлено: thechicho от Май 27, 2013, 12:19
Цитировать
#include <QtCore>
#include <iostream>

int main(int argc,char** argv)
{
      QString string = "This is my text !!";
     
      //Convert QString to Byte Array Here
      QByteArray array (string.toStdString().c_str());
     
      //Let's Print ByteArray Data
      std::cout<<array.data()<<std::endl;
}


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 29, 2013, 11:59
не работает.


Название: Re: преобразовать QString к BYTE*
Отправлено: kambala от Май 29, 2013, 12:19
тебе надо из строки "\x2A\x2A\x2A\x2A" получить массив чисел {0x2A, 0x2A, 0x2A, 0x2A}, правильно? тогда не понимаю чем тебя QString::utf16() не устраивает — возвращает именно массив из чисел 42.


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 30, 2013, 08:46
Вот смысл то в том,что при преобразовании BYTE* возвращает ересь, типа "Йииииииееееееннннн....." и так далее...я может что то перевожу не так?


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 30, 2013, 09:02
И при таком преобразовании (BYTE*)str.utf16(); значение переменной становится равным "\", а должно быть "****"


Название: Re: преобразовать QString к BYTE*
Отправлено: thechicho от Май 30, 2013, 09:05
напишите что у вас на входе и как это должно выглядеть на выходе, тогда может получится подсказать, в чем у вас проблема.


Название: Re: преобразовать QString к BYTE*
Отправлено: kambala от Май 30, 2013, 09:15
попробуй тогда (BYTE*)s.toAscii().data()


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 30, 2013, 09:52
Всем спасибо,с горем пополам все решилось,но сам процесс не радует)))
Вот как получается:
Из lineEdit получаем строку "2a 2a 2a 2a"
из нее делаем QString str, значение которой равно "\x2a\x2a\x2a\x2a" и получаем число элементов size,которое равно соответственно 4.
и простите "идиотское" преобразование:
Код:
char* temp = new char[size];
QString tempStr = QByteArray::fromHex(str.toAScii());

strcpy(temp,tempStr.toStdString().c_str());

(BYTE*)temp;

вот собственно так,если кто то может подсказать аналогичный,но более простой путь,буду признателен))


Название: Re: преобразовать QString к BYTE*
Отправлено: Авварон от Май 30, 2013, 10:15
Всем спасибо,с горем пополам все решилось,но сам процесс не радует)))
Вот как получается:
Из lineEdit получаем строку "2a 2a 2a 2a"
из нее делаем QString str, значение которой равно "\x2a\x2a\x2a\x2a" и получаем число элементов size,которое равно соответственно 4.
и простите "идиотское" преобразование:
Код:
char* temp = new char[size];
QString tempStr = QByteArray::fromHex(str.toAScii());

strcpy(temp,tempStr.toStdString().c_str());

(BYTE*)temp;

вот собственно так,если кто то может подсказать аналогичный,но более простой путь,буду признателен))

Код:
QString str = "\x2a\x2a\x2a\x2a";
QByteArray hex = QByteArray::fromHex(str.toAScii());
BYTE *bytes = reinterpret_cast<BYTE *>(hex.data());
bytes будет жив, пока живёт батарей.


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 30, 2013, 10:48
Код:
QString str = "\x2a\x2a\x2a\x2a";
QByteArray hex = QByteArray::fromHex(str.toAScii());
BYTE *bytes = reinterpret_cast<BYTE *>(hex.data());
bytes будет жив, пока живёт батарей.

Не работает;) так как вы написали может и работает,но это не то)))


Название: Re: преобразовать QString к BYTE*
Отправлено: Авварон от Май 30, 2013, 10:54
Что именно не работает? Я как бы не проверял вообще.


Название: Re: преобразовать QString к BYTE*
Отправлено: nikeo от Май 30, 2013, 11:03
возвращает опять бред,не то,тем более,когда так записываешь,она сразу же преобразуется в "****", а у меня значение самой переменной "\x2a\x2a\x2a\x2a"