QByteArray及其正常的c ++等价物

时间:2015-06-22 13:27:26

标签: c++ qt

我之前的代码是用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];

};

我的结果很荒谬。我做错了转换。 你能建议一个好方法吗?上面的类不是完整的代码。我删除了一些数据,不会让代码太长。

2 个答案:

答案 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::vectorQChar,那么您将拥有向我们提供一些您可以帮助我们的错误。

但是,如果你想转换为矢量/字符,然后对它们进行计算,那么你可以使用这些:

std::vector<unsigned char> newVector(
oldByteArray.begin(), oldByteArray.end());

myChar = oldQChar.toAscii();
or
myChar = oldQChar.toLatin1();