在我的应用程序中,我从本地(不是Unicode)字符集的文件中读取了字符串字段。
该字段为10个字节,如果字符串

char str ="STRING\0\0\0\0"; // that was read from file
QByteArray fieldArr(str,10); // fieldArr now is STRING\000\000\000\000
fieldArr = fieldArr.trimmed() // from some reason array still containts zeros
QTextCodec *textCodec = QTextCodec::codecForLocale();
QString field = textCodec->ToUnicode(fieldArr).trimmed(); // also not removes zeros

所以我的问题-如何从字符串中删除结尾的零?

附言调试时在“本地和表达式”窗口中看到零

最佳答案

我将假定str应该是char const *而不是char

只是不要遍历QByteArray-QTextCodec可以处理C字符串,并且以第一个空字节结尾:

QString field = textCodec->toUnicode(str).trimmed();

附录:由于该字符串可能不会以零结尾,因此似乎不可能在末尾添加一个空字节的存储,并且制作副本以准备制作副本似乎是浪费的,我建议自己计算长度并使用可接受字符指针和长度的toUnicode重载。
std::find对此很有用,因为如果未在其中找到元素,它将返回给定范围的结束迭代器。这使得不需要特殊情况的处理:
QString field = textCodec->toUnicode(str, std::find(str, str + 10, '\0') - str).trimmed();

09-27 05:53