我有一个QStringList,我想将其转换为未签名的char [32]。
可能吗?那我该怎么做?
示例:
publicKey = "0x46,0x9e,..."
auto queryPK = publicKey.split(',');
这就是我的qDebug()
queryPK[0] is 0x46
queryPK[1] is 0x9e
这就是转换后我想要的:
unsigned char pk = {0x46,0x9e,...}
答案 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
您必须添加拆分逻辑和循环才能获得完整的解决方案。