2014-01-28 59 views
5

我嘗試使用此代碼QByteArray轉換爲std::vector<unsigned char>轉換的QByteArray到std ::矢量<無符號字符>

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

我該如何得到它的工作?

回答

14

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

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

注:strlen是不是在C特別有用++;它告訴你一個C風格的以null結尾的字符串的長度(通過搜索內存,直到它找到一個零值字節,或者脫離可訪問內存的末尾並崩潰),但不能告訴你它的大小一個數組,這是你在這裏需要的。此外,使用邪惡的C風格強制轉換來強制無效代碼編譯並不是一個好主意。

+1

哦,它的作用就像魅力。 –

+1

downvote的任何理由?我確信這會起作用,但如果我錯了,請糾正我。 –

+1

Downvote是我的錯誤,我很抱歉。 – voodooattack

2

正如我在這裏看到的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); 
+6

奇怪的是'begin'和'end'似乎沒有記錄;他們當然[存在](https://qt.gitorious.org/qt/qtbase/source/68fb37d762a818cc44ea69f7c3a80a3f010b6713:src/corelib/tools/qbytearray.h#L362)。 –

相關問題