是否可以将“ QStringList”转换为“ unsigned char”?

时间:2018-12-19 13:01:47

标签: c++ qt

我有一个QStringList,我想将其转换为未签名的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 :(得分:2)

假设您的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++;
}

答案 1 :(得分:1)

您可以按照Qt documentation中的说明遍历列表。

因此,基本上,您需要类似以下内容(假设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个字节,否则您将获得缩小的转换

答案 2 :(得分:-1)

尝试使用toAscii().constData()

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

请注意,您必须使用以下代码删除序列:

delete [] sequence

您必须添加拆分逻辑和循环才能获得完整的解决方案。