我需要能够以这种格式转换QString
:
"0x00 0x00 0x00 0x00"
到这样的字节数组:
0x00,
0x00,
0x00,
0x00
我能够在Visual Studio / C#中这样做:
byte[] bytes = string.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
但是我现在正在使用Qt / C ++,我需要一种方法来做同样的事情。 最简单的方法是什么?
答案 0 :(得分:5)
不是最简洁的解决方案,但至少是安全的,我想(无法附加无效值):
QString string = "0x00 0x00 0x00 0x00";
QByteArray bytes;
for(auto const& x : string.split(' '))
{
bool ok;
uint val = x.toUInt(&ok, 16);
if(ok && val <= 0xff)
bytes.append(static_cast<char>(val));
}
这可能更快(无效值等于0
):
QString string = "0x00 0x00 0x00 0x00";
QStringList list = string.split(' ');
QByteArray bytes(list.size(), '\0');
for(size_t i = 0; i < list.size(); ++i)
{
bool ok;
uint val = list[i].toUInt(&ok, 16);
if(ok && val <= 0xff)
bytes[i] = static_cast<char>(val);
}
如果你想要的只是速度,你可以省略两种情况下的检查。