有时我收到的QString值为“ \ u0000”,我想检查接收到的字符串是否等于“ \ u0000”。 但是当我尝试:
qDebug() << QString("\u0000") << QString::fromUtf8("\u0000");
我得到输出:"\u0001"
"\u0001"
因此,我无法比较字符串。我看到该字符串最初是使用snprintf
从字节创建的,以获取char *,然后从std :: string创建了std :: string和QString,但是到目前为止我还不能复制它。但是我觉得这是一种解决方法,但不是简单的方法。
如何使用QString API创建值为\u0000
的QString,为什么QString("\u0000")
会生成值“ \ u0001”?
答案 0 :(得分:0)
QString始终为空终止。 null QString表示其内部数组中没有数据,而 empty QString的内部数据数组中只有一个空字符。因此,如果您可以控制原始数组的发送者,则最好通过QByteArray而不是QString进行发送。您将无法在QString中计算多个空字符。
摘自QString参考文档:
QString().isNull(); // returns true
QString().isEmpty(); // returns true
QString("").isNull(); // returns false
QString("").isEmpty(); // returns true
QString("abc").isNull(); // returns false
QString("abc").isEmpty(); // returns false
答案 1 :(得分:0)
我想出了如何创建这样的字符串。
QString str(1, QChar('\0'));
或从std :: string:
QString::fromStdString(std::string("\0", 1));
但是我仍然不知道为什么QString("\u0000")
会导致“ \ u0001”