C++ 将QByteArray转换为std::vector<;无符号字符>;

C++ 将QByteArray转换为std::vector<;无符号字符>;,c++,vector,std,unsigned-char,qbytearray,C++,Vector,Std,Unsigned Char,Qbytearray,我尝试使用以下代码将QByteArray转换为std::vector: 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

我尝试使用以下代码将
QByteArray
转换为
std::vector

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);
unsigned char*buffer=(unsigned char*)byteArrayBuffer.constData();
std::vector::size_type size=strlen((const char*)缓冲区;
std::矢量缓冲压缩(缓冲区,缓冲区+大小);
但是,假设
byteArrayBuffer
是一个填充了数据的
QByteArray
,我认为它在
unsigned char*buffer=(unsigned char*)byteArrayBuffer.constData()行上工作不好
因为
byteArrayBuffer.size()
返回的值与
bufferToCompress.size()不同


我怎样才能让它工作呢?

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

std::vector<unsigned char> bufferToCompress(
    byteArrayBuffer.begin(), byteArrayBuffer.end());
std::向量缓冲压缩(
byteArrayBuffer.begin(),byteArrayBuffer.end());
<>注释>代码> StLLIN <代码>在C++中不是特别有用;它告诉您以C样式null结尾的字符串的长度(通过搜索内存,直到找到零值字节,或者从可访问内存的末尾掉下来并崩溃),但不能告诉您数组的大小,这正是您需要的。此外,使用邪恶的C风格强制转换来强制编译无效代码从来都不是一个好主意。

正如我在这里看到的,QByteArray没有begin/end方法。但是有数据/长度。结果代码可能如下所示:

const unsigned char* begin = reinterpret_cast<unsigned char*>(byteArrayBuffer.data());
const unsigned char* end = begin + byteArrayBuffer.length();
std::vector<unsigned char> bufferToCompress( begin, end );
const unsigned char*begin=reinterpret_cast(byteArrayBuffer.data());
常量unsigned char*end=begin+byteArrayBuffer.length();
std::向量缓冲压缩(开始,结束);

投票失败的原因是什么?我相当肯定这会奏效,但如果我错了,请纠正我。这是错的!从
signed int
unsigned int
有一个非常危险的隐式强制转换!奇怪的是,
begin
end
似乎没有文档记录;他们当然喜欢。