Search code examples
c++vectorstdunsigned-charqbytearray

Convert QByteArray to std::vector<unsigned char>


I tried to convert QByteArray to std::vector<unsigned char> using this code:

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);

but, assuming that byteArrayBuffer is a QByteArray filled with data, I think it doesn't work well on line unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData(); because byteArrayBuffer.size() returns a different value than bufferToCompress.size().

How can I get it working?


Solution

  • I'm not familiar with Qt, but surely you just want

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

    Note: strlen is not particularly useful in C++; it tells you the length of a C-style null-terminated string (by searching memory until it either finds either finds a zero-valued byte, or falls off the end of accessible memory and crashes), but can't tell you the size of an array, which is what you'd need here. Also, using evil C-style casts to force invalid code to compile is never a good idea.