如何从 QByteArray 组织或提取信息

How to organize or extract info from a QByteArray

我有一个程序可以在单个 QByteArray 中接收一个完整的块。此块是 "divided",'carriage returns' 后跟 'end lines' (\r\n)。在所有这些垃圾中,我有个约会。最具体的是在第三行(第二行和第三行之间\r\n)。

每次我尝试从 ByteArray 中提取这个日期时,我都会得到一些随机垃圾。如何使用 QByteArray 更精确?

在不改变我的 ByteArray 的情况下提取此日期的最佳方法是什么?考虑到我不知道日期,它甚至可能是错误的格式。

为了便于理解,这里是我的 ByteArray 的示例:

RandomName=name\r\nRandomID=ID\r\nRandomDate=date\r\nRandomTime=time\r\nRandomWhatever=whatever(...)

编辑:

抱歉英语不好。

假设我收到了以下文本:

ProgName = Marcus
ProgID = 180
ProgDate = 15.01.16
ProgTime = 13:39
(More info)......

但是,none 这些信息对我很有用...除了日期。所有内容都存储在单个 QByteArray 中(我们称之为 'ba')。所以这是我的宝贝:

ProgName(space)=(space)Marcus\r\nProgID(space)=(space)180\r\nProgDate(space)=(space)15.01.16\r\nProgTime(space)=(space)13:39\r\n (keeps going)

我的问题是:在不改变或破坏 ba 的情况下将“15.01.16”("ProgDate")存储在 QString 中。

有多种方法,但请尝试以下解决方案之一。

1) 使用 split()

foreach (auto subByte, yourByteArray.replace("\r\n", "\n").split('\n')) {
    qDebug() << subByte;
    foreach (auto val, subByte.split('=')) {
        qDebug() << val;
    }
}

2) 使用 QRegularExpression/QRegularExpressionMatchIterator,使所有 pair(key, value)

QRegularExpression  re("(\w+)=(\w+)");
QRegularExpressionMatchIterator i = re.globalMatch(yourByteArray);

while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    qDebug() << match.captured(0)<< match.captured(1) << match.captured(2);
}

3) 使用 QRegularExpression/QRegularExpressionMatch

QRegularExpression  re("(RandomDate)=(\w+)");
QRegularExpressionMatch match = re.match(yourByteArray);

if (match.hasMatch())
    qDebug() << match.captured(0)<< match.captured(1) << match.captured(2);