在我的应用程序中,我从本地(不是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();