Возможно ли преобразовать 'QStringList' в 'unsigned char'? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть QStringList, и я хочу преобразовать его в unsigned char [32].

Возможно?И как мне это сделать?

Пример:

publicKey = "0x46,0x9e,..."
auto queryPK = publicKey.split(',');

, так что это мой qDebug ()

queryPK[0] is 0x46

queryPK[1] is 0x9e

И это то, что я хочу получить после преобразования:

unsigned char pk = {0x46,0x9e,...}

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Попробуйте с помощью toAscii().constData().

QString str = "ABCD";
int length = str.length();
unsigned char *sequence = NULL;
sequence = (unsigned char*)qstrdup(str.toAscii().constData());

имейте в виду, что вам нужно удалить последовательность со следующим кодом:

delete [] sequence

Вы должны добавить логику разделенияи цикл, чтобы получить полное решение.

0 голосов
/ 19 декабря 2018

Вы можете перебирать свой список, как описано в документации Qt .

Итак, в основном вам нужно что-то вроде этого (при условии, что queryPK - ваш QStringList объект):

std::vector<unsigned char> v;

QStringList::const_iterator constIterator;
for (constIterator = queryPK.constBegin(); constIterator != querypk.constEnd();
       ++constIterator)
    v.emplace_back(std::stoul(constIterator));

но вы должны убедиться, что constIterator имеет длину 1 байт, иначе вы получите сужающее преобразование

0 голосов
/ 19 декабря 2018

Предполагая, что ваш QStringList содержит что-то вроде этого:

QStringList sl = QStringList() << "0x46" << "0x9e";

Возможное решение:

unsigned char pk[32];
int idx = 0;
for (const QString& s : sl){
    // transform to uint
    bool converted = false;
    unsigned char uc = static_cast<unsigned char>(s.toUInt(&converted, 0));
    if (converted){
        pk[idx] = uc;
    }
    idx++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...