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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: преобразовать QString к BYTE*  (Прочитано 10720 раз)
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";

то все запишется нормально!в чем может заключаться проблема?
Записан
Bepec
Гость
« Ответ #1 : Май 22, 2013, 10:38 »

parseSerNum троянский конь. Уверены что он именно то возвращает?
Записан
nikeo
Гость
« Ответ #2 : Май 22, 2013, 10:49 »

он возвращает строку типа char*,и ее значение равно тому что нужно,так что да, уверен...а вот значение pbData, тоже равно тому же,хотя и не должно:
при рабочем варианте,оно содержит "****", и их количество зависит от числа в cbData...но если передавать через функцию,то оно содержит именно строку типа "\x..\x..\x..."
Хотя я начинаю думать, что вы от части правы.
Записан
nikeo
Гость
« Ответ #3 : Май 22, 2013, 11:41 »

Вот что я понял,простите за "****")))
Если я преобразую строку типа QString к char*, то получаю (скажем если "\x2A\x2A\x2A\x2A"), то получаю именно запись,а мне нужно чтобы они преобразовались в чиловые значения,то есть, на сколько я понимаю, \x2A в таблице ASCII как раз соответствует зведочке.
Как такое можно сделать?

Или как собрать строку,если вводится к примеру "2A 2A 2A 2A" в lineEdit, чтобы получилось именно так?
« Последнее редактирование: Май 22, 2013, 11:43 от nikeo » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Май 22, 2013, 11:46 »

попробуй QString::utf16()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
nikeo
Гость
« Ответ #5 : Май 27, 2013, 11:50 »

пробовал,не помогло(
Записан
thechicho
Гость
« Ответ #6 : Май 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...
Записан
thechicho
Гость
« Ответ #7 : Май 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;
}
Записан
nikeo
Гость
« Ответ #8 : Май 29, 2013, 11:59 »

не работает.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Май 29, 2013, 12:19 »

тебе надо из строки "\x2A\x2A\x2A\x2A" получить массив чисел {0x2A, 0x2A, 0x2A, 0x2A}, правильно? тогда не понимаю чем тебя QString::utf16() не устраивает — возвращает именно массив из чисел 42.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
nikeo
Гость
« Ответ #10 : Май 30, 2013, 08:46 »

Вот смысл то в том,что при преобразовании BYTE* возвращает ересь, типа "Йииииииееееееннннн....." и так далее...я может что то перевожу не так?
Записан
nikeo
Гость
« Ответ #11 : Май 30, 2013, 09:02 »

И при таком преобразовании (BYTE*)str.utf16(); значение переменной становится равным "\", а должно быть "****"
Записан
thechicho
Гость
« Ответ #12 : Май 30, 2013, 09:05 »

напишите что у вас на входе и как это должно выглядеть на выходе, тогда может получится подсказать, в чем у вас проблема.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Май 30, 2013, 09:15 »

попробуй тогда (BYTE*)s.toAscii().data()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
nikeo
Гость
« Ответ #14 : Май 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;

вот собственно так,если кто то может подсказать аналогичный,но более простой путь,буду признателен))
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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