c++ - 将 char * 转换为 QString 并删除零

标签 c++ qt codec qbytearray

在我的应用程序中,我从本地(非 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/

相关文章:

c++ - 通过傅里叶变换的振荡和频谱

c++ - inf 输出计算线斜率

c++ - 如何强制 QDateTime::fromString 读取 UTC 时间

MongoDB Scala 驱动程序 - 呈现 BSON 文档

c++ - 解码图像文件的框架

c++ - 避免构造函数中 const 引用和右值引用的指数增长

c++ - MinGW,链接到 Windows 上的 dll

c++ - 窗外的QPushButton(灵感: CleanMyMac)

qt - 如何让矩形高度填充ScrollView

audio - 如何确定 Windows 上音频文件的编解码器?