繁体   English   中英

将QByteArray转换为std :: vector <unsigned char>

[英]Convert QByteArray to std::vector<unsigned char>

我尝试使用以下代码将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()返回的值不同于byteArrayBuffer.size() bufferToCompress.size()

我怎样才能让它运转起来?

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

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

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

正如我在这里看到的那样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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM