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

どうすれば機能しますか?

4

2 に答える 2

23

私はQtに精通していませんが、確かにあなたはただしたいだけです

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

注: strlenC++ では特に有用ではありません。Cスタイルのヌル終了文字列の長さはわかりますが(ゼロ値のバイトが見つかるか、アクセス可能なメモリの終わりから落ちてクラッシュするまでメモリを検索します)、サイズはわかりませんこれは、ここで必要なものです。また、悪意のある C スタイルのキャストを使用して無効なコードを強制的にコンパイルすることは、決して良い考えではありません。

于 2014-01-28T11:54:41.710 に答える
2

ここで見るようにhttp://qt-project.org/doc/qt-4.8/qbytearray.html 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 );
于 2014-01-28T12:05:00.267 に答える