【问题标题】:read / write on byte array by QDataStream通过 QDataStream 读取/写入字节数组
【发布时间】:2016-11-04 21:57:11
【问题描述】:

我有字节图像数组,我想将此字节数组写入另一个字节数组,并在第二个字节数组上添加另一个值,我正在使用此代码,但我认为有问题

 QByteArray byteArray;

 QDataStream ds(&byteArray,QIODevice::ReadWrite);

 ds<<(qint32)20;

 ds<<bArray;

 qint32 code;

 ds>>code;

当我跟踪 ds>>code 它总是有 0 值但实际上它必须有 20 值并且我使用了 ds.resetStatus(); 但它返回又是0值

【问题讨论】:

    标签: c++ qt qdatastream


    【解决方案1】:

    我怀疑QDataStream::operator&lt;&lt; 函数设置了某种指针/迭代器/索引来指向下一个位置,在下一次调用时它们可以开始插入数据。 QDataStream::operator&gt;&gt; 可能从同一位置开始读取。

    QDataStream::resetStatus() 不会更改对象读取/写入的位置。它只是将状态重置为QDataStream::Ok,以允许您在发生错误后从流中读取。

    您可以使用两个QDataStream 对象——一个用于写入QByteArray,另一个用于读取同一个QByteArray

    QByteArray byteArray;
    
    QDataStream ds_w(&byteArray,QIODevice::WriteOnly);
    QDataStream ds_r(&byteArray,QIODevice::ReadOnly);
    
    ds_w << (qint32)20;
    
    ds_w << bArray;
    
    qint32 code;
    
    ds_r >> code;
    

    【讨论】:

    • ty R Sahu 你的代码也有效,但我使用了 ds.device()->reset();
    • 请注意,您可以使用ds.device()-&gt;seek() 指向您想要的任何位置(不仅仅是流的开头)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2011-04-02
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多