在我的应用程序中,我从本地(非 Unicode)字符集的文件中读取了一个字符串字段。 该字段为 10 个字节,如果字符串 < 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();
关于c++ - 将 char * 转换为 QString 并删除零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28914345/