我尝试使用以下代码将QByteArray
转换为std::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()
。
我怎样才能让它发挥作用?
答案 0 :(得分:20)
我不熟悉Qt,但你肯定只想要
std::vector<unsigned char> bufferToCompress(
byteArrayBuffer.begin(), byteArrayBuffer.end());
注意:strlen
在C ++中并不特别有用;它会告诉你一个C风格的以空字符结尾的字符串的长度(通过搜索内存,直到它找到一个零值字节,或者从可访问内存的末尾掉落并崩溃),但不能告诉你它的大小一个数组,这是你在这里需要的。此外,使用邪恶的C风格的强制转换来强制编译无效代码永远不是一个好主意。
答案 1 :(得分: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 );