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

9

我试着使用这段代码将 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()不同。

如何让它正常工作呢?

2个回答

23

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

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

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


1
有什么原因导致你给了负评?我相当确定这会起作用,但如果我错了,请纠正我。 - Mike Seymour

2

根据我在http://qt-project.org/doc/qt-4.8/qbytearray.html上的查看,QByteArray没有begin/end方法,而是有data/length方法。以下是可能的代码结果:

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

7
“begin”和“end”似乎没有文件记录很奇怪;它们肯定存在 - Mike Seymour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接