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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString в HEX(решено)  (Прочитано 21682 раз)
yesrus
Гость
« : Ноябрь 01, 2009, 13:08 »

Собственно сабж...подскажите пожалуйста как сконвертировать строку qstring в hex(и записать результат в другой qstring т.е. в итоге должно получиться нечто вроде str1(исходная строка) = "TEST", str2(результат в HEX) = 54 45 53 54)
Заранее всем ответившим спасибо!
« Последнее редактирование: Ноябрь 01, 2009, 13:59 от yesrus » Записан
yesrus
Гость
« Ответ #1 : Ноябрь 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;
}
Записан
Rcus
Гость
« Ответ #2 : Ноябрь 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;
}
Записан
spectre71
Гость
« Ответ #3 : Ноябрь 01, 2009, 15:46 »

Все гораздо проще.
Приведу один пример:
Код
C++ (Qt)
QString src    = "ABCDEFG";
QString result = src.toLocal8Bit().toHex();
Записан
Rcus
Гость
« Ответ #4 : Ноябрь 01, 2009, 16:15 »

Все гораздо проще.
Приведу один пример:
Код
C++ (Qt)
QString src    = "ABCDEFG";
QString result = src.toLocal8Bit().toHex();
Этот вариант не вставляет пробелы, так что не катит
Записан
spectre71
Гость
« Ответ #5 : Ноябрь 02, 2009, 12:03 »

Этот вариант не вставляет пробелы, так что не катит

Вставить пробелы(если нужны) еще строчка кода.
Записан
Rcus
Гость
« Ответ #6 : Ноябрь 02, 2009, 13:29 »

Код:
for (int i = 2; i < r.size(); i += 3) r.insert(i, ' ');
Это вы о такой строке? Мне кажется будет медленно.
Записан
spectre71
Гость
« Ответ #7 : Ноябрь 02, 2009, 13:36 »

Код:
for (int i = 2; i < r.size(); i += 3) r.insert(i, ' ');
Это вы о такой строке? Мне кажется будет медленно.
Ну не надо понимать буквально(одна строка).
Хотя и этот вариант имеет право на существование. Понятие медленно - относительно. Сильно зависит от задачи.
Записан
gnp
Гость
« Ответ #8 : Февраль 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();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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