Кастинг Qvector в QString - PullRequest
       63

Кастинг Qvector в QString

0 голосов
/ 26 февраля 2020

Я хочу преобразовать мой вектор uint8_t, который соответствует шестнадцатеричным значениям символов, в строку. Но я не могу преобразовать мой вектор в строку. Помогите пожалуйста Мой код:

#include <QVector>
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QVector<uint8_t> vec;
    vec.push_back(51);
    vec.push_back(32);
    vec.push_back(123);
    QString message = "";
    qDebug()<<vec.at(0);

    for(int counter=0;counter<vec.length();counter++){
        message=vec.at(counter)+ message;
    }

    qDebug()<<message;
    //w.show();
    return a.exec();
}

Ответы [ 4 ]

0 голосов
/ 26 февраля 2020

Может помочь что-то подобное (просто нужно заменить std :: vector на qvector):

// Example program
#include <iostream>
#include <string>
#include <vector>
#include <stdint.h>
int main()
{
    std::vector<uint8_t> vec;
    vec.push_back(51);
    vec.push_back(32);
    vec.push_back(123);

    std::vector<char> result;

    for (auto v: vec)
    {
        char c = v;
        result.push_back(c);    
    }

    std::string s(result.begin(), result.end());
    std::cout << s;
}
0 голосов
/ 26 февраля 2020

Ваш вопрос все еще неясен для меня, но, насколько я понял, вы хотите, чтобы qDebug() выводил числа в шестнадцатеричном формате.

Так что это можно сделать через QByteAray. Возможная реализация:

#include <QVector>
#include <QCoreApplication>
#include <QDebug>
#include <algorithm>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QVector<uint8_t> vec;
    vec.push_back(51);
    vec.push_back(32);
    vec.push_back(123);

    QByteArray data;
    std::copy( vec.begin() , vec.end() , std::back_inserter( data ) );

    qDebug() << data.toHex( ' ' );

    return a.exec();
}

Вывод:

33 20 7b

Также возможно преобразовать одно число в строку в шестнадцатеричном представлении с QString :: number (your_value, 16) . 16 представляет base здесь.

0 голосов
/ 26 февраля 2020
#include <QCoreApplication>
#include <QDebug>
#include <algorithm>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QVector<uint8_t> vec;
    QString message;
    QByteArray hex;
    vec.push_back(65);
    vec.push_back(72);
    vec.push_back(73);
    vec.push_back(84);

    QByteArray data;
    std::copy( vec.begin() , vec.end() , std::back_inserter( data ) );
    hex=data.toHex();
    qDebug() << hex+ " ";
    qDebug()<<message.fromUtf8(data);
   return a.exec();
}
0 голосов
/ 26 февраля 2020

Используйте QString::fromUtf8() или QString::fromLatin1() для одновременного преобразования.

...