Дмитрий
5 февраля 2020 г. 14:38

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

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

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

5

Вам это нравится? Поделитесь в социальных сетях!

5
Алексей Внуков
  • 5 февраля 2020 г. 14:56

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

    Дмитрий
    • 5 февраля 2020 г. 15:16
    • (ред.)

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

      ИП
      • 5 февраля 2020 г. 15:26
      • (ред.)

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

      1. function text2hex_utf8(text)
      2. {
      3. var ch = 0;
      4. var result = "";
      5. for (var i = 0; i < text.length; i++)
      6. {
      7. ch = text.charCodeAt(i).toString(16);
      8. while (ch.length < 4) ch = "0" + ch;
      9. result += ch;
      10. }
      11. return result;
      12. }
      1. function hex2text_utf8(hex)
      2. {
      3. var ch = 0;
      4. var result = "";
      5. hex = trim_text(hex);
      6. for (var i = 4; i <= hex.length; i += 4)
      7. {
      8. ch = parseInt(hex.substring(i - 4, i), 16);
      9. ch = String.fromCharCode("0x" + ch.toString(16));
      10. result += ch;
      11. }
      12. return result;
      13. }
        Intruder
        • 5 февраля 2020 г. 19:00

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

          Дмитрий
          • 5 февраля 2020 г. 19:20

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

          1. QString decoded_str;
          2. for(auto i=0; i<encoded.length(); i+=4)
          3. {
          4. std::vector<QChar> v;
          5. std::copy(encoded.begin()+i, encoded.begin()+i+4, std::back_inserter(v));
          6. QString num_hex;
          7. std::copy(v.begin(),v.end(), std::back_inserter(num_hex));
          8. int num = std::stoi(num_hex.toStdString(), 0, 16);
          9. QChar ch(num);
          10. decoded_str.append(ch);
          11. }
          12. qDebug() << "Balance sim:" << decoded_str;

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            • Последние комментарии
            • IscanderChe
              12 апреля 2025 г. 17:12
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              1 апреля 2025 г. 11:41
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              9 марта 2025 г. 21:02
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              9 марта 2025 г. 16:14
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              22 ноября 2024 г. 21:51
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…