我之前的代码是用QT编写的。生成的输出非常慢。
我对QT有非常基本的了解。
我希望知道QByteArray
对象和QChar
与普通c ++等价物。
Qt。{/ p>中的Datapackage
课程
class Datapackage
{
public:
Datapackage(QByteArray datas,int start);
QVector<double> getX() const;
QVector<double> getY() const;
private:
QVector<QChar> intensity;
QVector<double>x;
QVector<double>y;
qint8 header[288];
};
我尝试了正常的c ++ Datapackage
类
class Datapackage
{
public:
Datapackage( std::vector<char> datas , int start );
std::vector<double> getX() const;
std::vector<double> getY() const;
private:
std::vector<char> intensity;
std::vector<double> x;
std::vector<double> y;
int8_t header[288];
};
我的结果很荒谬。我做错了转换。 你能建议一个好方法吗?上面的类不是完整的代码。我删除了一些数据,不会让代码太长。
答案 0 :(得分:3)
QChar
不是char
。
QByteArray
不是std::vector<char>
。
QChar
更像wchar_t
,虽然它是一个类,并提供比仅存储字符更多的功能。不要忘记QChar
存储UTF-16 代码单元。一些Unicode 代码点存储为两个UTF-16代码单元(称为代理对)。所以你永远不要假设一个QChar
代表一个完整的代码点。同样,您永远不应该假设一个代码点代表一个字符。一些字符由多个代码点表示。一般来说:
number of printable characters <= number of code points <= number of code units (QChars)
QByteArray
提供超出std::vector
功能的功能,即可与QDataStream
等一起使用。
我之前的代码是用QT编写的。生成的输出非常慢。
您的问题是您没有向我们展示任何代码,并且您预先假定了一个解决方案而不了解问题所在。您已经确定std::vector
将是一个解决方案,但您确实不知道问题出在哪里。
我们需要看一个再现问题的minimal示例,而只有可以决定QByteArray
本身是否是罪魁祸首,或者(更有可能)你设计解决方案的方式不正确。
答案 1 :(得分:0)
如果您尝试将QByteArray
的{{1}}的所有实例更改为代码中的字符std::vector
和QChar
,那么您将拥有向我们提供一些您可以帮助我们的错误。
但是,如果你想转换为矢量/字符,然后对它们进行计算,那么你可以使用这些:
std::vector<unsigned char> newVector(
oldByteArray.begin(), oldByteArray.end());
和
myChar = oldQChar.toAscii();
or
myChar = oldQChar.toLatin1();