C ++将char转换为字节数组

时间:2015-12-23 11:23:25

标签: c++ arrays string qt

我需要能够以这种格式转换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 ++,我需要一种方法来做同样的事情。 最简单的方法是什么?

1 个答案:

答案 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);
}

如果你想要的只是速度,你可以省略两种情况下的检查。