Дмитрий
Дмитрий5. Februar 2020 03:38

Конвертация 16-ричной строки в строку UTF-8

UTF8, код символа, конвертация

Всем привет!
Вопрос в следующем.
Есть строка QString в которой уже находятся 16-ричные коды символов: "0074006500730074002000740065007800740020003200360030002e00300031". Хочу получить из нее текст "test text 260.01".
Есть ли способ сделать это без перебора строки по 4 символа, конвертации их в код символа? Например тут делается то, что нужно по нажатию кнопки "Декодировать" и выборе UTF-8.
Делаю обработку USSD запроса баланса. Приходит ответ с балансом, а он выглядит как набор 16-ричных кодов символов. Помимо баланса еще присутствует текст.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

5
Алексей Внуков
  • 5. Februar 2020 03:56

попробуйте с троку в ByteArray а потом string.fromHex

    Дмитрий
    • 5. Februar 2020 04:16
    • (bearbeitet)

    Не, это не подходит. Там абракадабра лежит в данном случае.
    Я сделал с помощью цикла, но хотелось бы не изобретать велосипед.
    И есть ли способ это сделать в скрипте bash? Из файла, допустим, беру эту строку кодов и на выходе получаю раскодированную строку.

      ИП
      • 5. Februar 2020 04:26
      • (bearbeitet)

      На сайте простой перебор на js
      http://crypt-online.ru/_js/crypts/hex.js

      function text2hex_utf8(text)
      {
          var ch = 0;
          var result = "";
          for (var i = 0; i < text.length; i++)
          {
              ch = text.charCodeAt(i).toString(16);
              while (ch.length < 4) ch = "0" + ch;
              result += ch;
          }
          return result;
      }
      
      function hex2text_utf8(hex)
      {
          var ch = 0;
          var result = "";
          hex = trim_text(hex);
          for (var i = 4; i <= hex.length; i += 4)
          {
              ch = parseInt(hex.substring(i - 4, i), 16);
              ch = String.fromCharCode("0x" + ch.toString(16));
              result += ch;
          }
          return result;
      }      
      
        Intruder
        • 5. Februar 2020 08:00

        Для начала нужно понимать, что это за кодировка и только потом строить алгоритм. Из Вашей строки видно, что каждые два символа, начиная слева - это нули. Получается, что последующие два символа кодируют букву. Или я не прав?

          Дмитрий
          • 5. Februar 2020 08:20

          Строка сама юникодовская на сколько понял. В реале там есть слова на кириллице, и этой зависимости с нулями уже нет.
          Я сделал так (не могу сказать на сколько красиво это):

          QString decoded_str;
          for(auto i=0; i<encoded.length(); i+=4)
          {
              std::vector<QChar> v;
              std::copy(encoded.begin()+i, encoded.begin()+i+4, std::back_inserter(v));
              QString num_hex;
              std::copy(v.begin(),v.end(), std::back_inserter(num_hex));
              int num = std::stoi(num_hex.toStdString(), 0, 16);
              QChar ch(num);
              decoded_str.append(ch);
          }
          qDebug() << "Balance sim:" << decoded_str;
          

            Kommentare

            Nur autorisierte Benutzer können Kommentare posten.
            Bitte Anmelden oder Registrieren
            Letzte Kommentare
            A
            ALO1ZE19. Oktober 2024 08:19
            Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов5. Oktober 2024 07:51
            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55. Juli 2024 11:02
            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssr8. Februar 2024 18:43
            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Jetzt im Forum diskutieren
            J
            JacobFib17. Oktober 2024 03:27
            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
            JW
            Jhon Wick1. Oktober 2024 15:52
            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
            КГ
            Кирилл Гусарев27. September 2024 09:09
            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
            F
            Fynjy22. Juli 2024 04:15
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

            Folgen Sie uns in sozialen Netzwerken