【发布时间】:2018-04-14 17:29:17
【问题描述】:
我有一个QByteArray,其中包含特殊格式的电报,然后通过 UDP 将其发送到远程机器以进行进一步处理。我使用QByteArray::append() 将电报放在一起。
电报的组成部分之一是索引:1、2、3、...、999。该索引需要在前面用零填充:001、002、003、...、999。为了做到这一点,我最初为测试目的对索引进行了硬编码:
...
telegram.append("001");
...
但后来我显然不得不转向更通用的解决方案,例如
...
QString paddedIdx = QString("%1").arg(idx, 2, QChar('0'));
telegram.append(paddedIdx);
...
最初的尝试没有任何问题。查看telegram 的已调试内容,我可以看到“002”附加到字节数组中。但是,使用新解决方案时,我得到“0\002”,因此远程机器上的电报处理失败(我使用 reg ex 进行解析)。如果我没记错的话,\0 是终止字符,但它绝对是我不希望在我的字节数组中看到的东西。
【问题讨论】:
-
我会更简单并使用“QString::prepend”而不是参数实现。 doc.qt.io/qt-5/qstring.html#prepend
-
"0\002"不是{'0', NULL, '0', '2'}它是{'0', 2}。这是因为\002是八进制数002。
标签: arrays string qt null-terminated zero-padding