我需要能够以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++,我需要一种方法来做同样的事情.最简单的方法是什么?
我猜不是最简洁的解决方案,但至少是安全的(不附加无效值):
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(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(val); }
如果您想要的只是速度,则可以省略两种情况下的检查.