9

我试图转换QByteArraystd::vector<unsigned char>使用此代码:

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().

我怎样才能让它工作?

4

2 回答 2

23

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

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

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

于 2014-01-28T11:54:41.710 回答
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 );
于 2014-01-28T12:05:00.267 回答