【问题标题】:How to organize or extract info from a QByteArray如何从 QByteArray 组织或提取信息
【发布时间】:2016-12-23 09:05:55
【问题描述】:

我有一个程序可以在单个 QByteArray 中接收完整的块。该块被“分割”为“回车”,后跟“结束行”(\r\n)。在所有这些垃圾的中间,我有一个约会。尤其是在第三行(在第二行和第三行\r\n 之间)。

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

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

为了便于理解,这里是我的 ByteArray 的一个例子:

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

编辑:

抱歉英语不好。

假设我收到了以下短信:

ProgName = 马库斯
程序 ID = 180
ProgDate = 15.01.16
ProgTime = 13:39
(更多信息)......

但是,这些信息对我没有任何用处……除了日期。一切都存储在一个 QByteArray 中(我们称它为“ba”)。所以这是我的 ba:

ProgName(空格)=(空格)Marcus\r\nProgID(空格)=(空格)180\r\nProgDate(空格)=(空格)15.01.16\r\nProgTime(空格)=(空格)13 :39\r\n(继续)

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

【问题讨论】:

  • 如何将字节转换回字符?似乎您需要做的就是扫描 QByteArray 以获取第二个“\r\n”的索引,获取 '=' 字符的索引,然后将每个字符复制到下一个“\r\n " 字符对...
  • 您将所有内容描述为“随机垃圾”。你的输入是随机垃圾,你的输出是随机垃圾,中间的东西是随机垃圾。编辑您的问题以显示您尝试过的内容,显示您得到的结果,并显示您期望的结果。
  • @user2647513 是的,我尝试这样做,但最终得到了错误的 ByteArray 部分。很可能是我自己对函数的使用不当
  • @BarmakShemirani 对不起。我会在编辑时尝试更清楚一点

标签: c++ qt qbytearray


【解决方案1】:

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

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);

【讨论】:

  • 嗯,我喜欢第一个选项,但主要是因为它更容易理解。我会试一试并报告。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多