Russian Qt Forum

Qt => Общие вопросы => Тема начата: yesrus от Ноябрь 01, 2009, 13:08



Название: QString в HEX(решено)
Отправлено: yesrus от Ноябрь 01, 2009, 13:08
Собственно сабж...подскажите пожалуйста как сконвертировать строку qstring в hex(и записать результат в другой qstring т.е. в итоге должно получиться нечто вроде str1(исходная строка) = "TEST", str2(результат в HEX) = 54 45 53 54)
Заранее всем ответившим спасибо!


Название: Re: QString в HEX
Отправлено: yesrus от Ноябрь 01, 2009, 13:59
Вообщем решил не парить мозг и сделать все тупо:)
Вот решение если кому нужно:
Код
C++ (Qt)
QString MainWindow::hex(QString str) {
QString chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_,.()[]{}<>~!@#$%^&*+=?";
QStringList hexstr;
QString fn;
int i, he;
hexstr <<"41"<<"42"<<"43"<<"44"<<"45"<<"46"<<"47"<<"48"<<"49"<<"4a"<<"4b"<<"4c"<<"4d"<<"4e"
<<"4f"<<"50"<<"51"<<"52"<<"53"<<"54"<<"55"<<"56"<<"57"<<"58"<<"59"<<"5a"<<"61"<<"62"
<<"63"<<"64"<<"65"<<"66"<<"67"<<"68"<<"69"<<"6a"<<"6b"<<"6c"<<"6d"<<"6e"<<"6f"<<"70"
<<"71"<<"72"<<"73"<<"74"<<"75"<<"76"<<"77"<<"78"<<"79"<<"7a"<<"31"<<"32"<<"33"<<"34"
<<"35"<<"36"<<"37"<<"38"<<"39"<<"30"<<"2d"<<"5f"<<"1f"<<"2e"<<"28"<<"29"<<"5b"<<"5d"
<<"7b"<<"7d"<<"3c"<<"3e"<<"7e"<<"21"<<"40"<<"23"<<"24"<<"25"<<"5e"<<"26"<<"2a"<<"2b"
<<"3d"<<"3f";
for (i=0; i < str.size(); ++i){
he = chars.indexOf(str[i]);
if ( he >= 0) {
    fn = fn + hexstr[he];
    fn = fn + " ";
     }
}
return fn;
}


Название: Re: QString в HEX(решено)
Отправлено: Rcus от Ноябрь 01, 2009, 14:55
У меня в проекте вот такой код работает.
Код
C++ (Qt)
QString bytesToString(const QByteArray &data)
{
   static const char numbers[] = "0123456789ABCDEF";
   QString r;
   r.resize(data.size()*3-1);
   int rpos = 0;
   for (int i = 0; i < data.size(); ++i) {
       uchar c = data.at(i);
       r[rpos++] = QChar(numbers[(c >> 4) % 16]);
       r[rpos++] = QChar(numbers[c % 16]);
       if (i != data.size() - 1)
           r[rpos++] = QChar(' ');
   }
   return r;
}


Название: Re: QString в HEX(решено)
Отправлено: spectre71 от Ноябрь 01, 2009, 15:46
Все гораздо проще.
Приведу один пример:
Код
C++ (Qt)
QString src    = "ABCDEFG";
QString result = src.toLocal8Bit().toHex();


Название: Re: QString в HEX(решено)
Отправлено: Rcus от Ноябрь 01, 2009, 16:15
Все гораздо проще.
Приведу один пример:
Код
C++ (Qt)
QString src    = "ABCDEFG";
QString result = src.toLocal8Bit().toHex();
Этот вариант не вставляет пробелы, так что не катит


Название: Re: QString в HEX(решено)
Отправлено: spectre71 от Ноябрь 02, 2009, 12:03
Этот вариант не вставляет пробелы, так что не катит

Вставить пробелы(если нужны) еще строчка кода.


Название: Re: QString в HEX(решено)
Отправлено: Rcus от Ноябрь 02, 2009, 13:29
Код:
for (int i = 2; i < r.size(); i += 3) r.insert(i, ' ');
Это вы о такой строке? Мне кажется будет медленно.


Название: Re: QString в HEX(решено)
Отправлено: spectre71 от Ноябрь 02, 2009, 13:36
Код:
for (int i = 2; i < r.size(); i += 3) r.insert(i, ' ');
Это вы о такой строке? Мне кажется будет медленно.
Ну не надо понимать буквально(одна строка).
Хотя и этот вариант имеет право на существование. Понятие медленно - относительно. Сильно зависит от задачи.


Название: Re: QString в HEX(решено)
Отправлено: gnp от Февраль 27, 2012, 16:45
Можно так:
QString getDumpHexStr(const char* mem, int size)
{
    QString str;
    ushort val = 0;
    for (int i = 0; i < size; i++)
    {
        val = (ushort) mem;
        str = str + QString("%1 ").arg(val, 0, 16).rightJustified(3, '0').right(3);
    }
    return str.trimmed();
}