【问题标题】:Convert QByteArray to std::vector<unsigned char>将 QByteArray 转换为 std::vector<unsigned char>
【发布时间】:2014-02-19 17:01:31
【问题描述】:

我尝试使用此代码将QByteArray 转换为std::vector&lt;unsigned char&gt;

unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData();
std::vector<unsigned char>::size_type size = strlen((const char*)buffer);
std::vector<unsigned char> bufferToCompress(buffer, buffer + size);

但是,假设byteArrayBuffer 是一个充满数据的QByteArray,我认为它在unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData(); 线上效果不佳,因为byteArrayBuffer.size() 返回的值与bufferToCompress.size() 不同。

我怎样才能让它工作?

【问题讨论】:

    标签: c++ vector std unsigned-char qbytearray


    【解决方案1】:

    我不熟悉 Qt,但你肯定只是想要

    std::vector<unsigned char> bufferToCompress(
        byteArrayBuffer.begin(), byteArrayBuffer.end());
    

    注意:strlen 在 C++ 中并不是特别有用;它告诉你一个 C 风格的以空字符结尾的字符串的长度(通过搜索内存,直到找到一个零值字节,或者从可访问内存的末尾掉下来并崩溃),但不能告诉你大小一个数组,这是你在这里需要的。此外,使用邪恶的 C 风格强制转换来强制编译无效代码绝不是一个好主意。

    【讨论】:

    • 否决票的任何理由?我很确定这会起作用,但如果我错了,请纠正我。
    【解决方案2】:

    正如我在这里看到的http://qt-project.org/doc/qt-4.8/qbytearray.html QByteArray 没有开始/结束方法。但是有数据/长度。结果代码可能如下所示:

    const unsigned char* begin = reinterpret_cast<unsigned char*>(byteArrayBuffer.data());
    const unsigned char* end = begin + byteArrayBuffer.length();
    std::vector<unsigned char> bufferToCompress( begin, end );
    

    【讨论】:

    • 奇怪的是 beginend 似乎没有记录;他们当然是exist
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多