我在創建一個應用程序,其中OpenCV中的Mat圖像使用cv::imencode
編碼爲base64字符串。爲此,我必須將vector<unsigned char>
轉換爲const unsigned char*
。將vector <unsigned char>轉換爲const unsigned char *
我該怎麼做?
vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(0);
if(!cv::imencode(".ppm", desc, buffer, compression_params)){
printf("Image encoding failed");
}
// This generates a error
string output = base64_encode(buffer.data(), buffer.size());
printf("Output: %s", output.c_str());
這是我的錯誤:EXC_BAD_ACCESS (code=1, address=0x2ffd7000)
更新
現在,它不會產生任何錯誤的了,但在轉換的地方出了差錯;輸出與解碼後的輸入不同,它主要由A字符組成。這是當前的腳本:
vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);
if(!cv::imencode(".pgm", desc, buffer, compression_params)){
printf("Image encoding failed");
}
string output = base64_encode(buffer.data(), buffer.size());
printf("Output: %s", output.c_str());
我不認爲這應該是另外一個問題,因爲我的猜測是,向量之間的轉換爲const無符號字符食堂的結果了; base64_encode曾經工作過。
'buffer.data()已經'是一個'const的無符號字符*',所以沒有必要'reinterpret_cast'(如果你不使用C++ 11編譯器,你可以執行'&buffer [0]')。另外,發佈你的實際錯誤信息將會非常有用......否則,人們會猜測問題是什麼。 – Cornstalks 2013-03-08 14:16:14
我得到這個錯誤,當我刪除它:'對象0x41444967 malloc:***錯誤:被釋放的指針沒有被分配',當我使用'&buffer [0]'我得到'EXC_BAD_ACCESS(code = 1,address = 0x2ffd7000)' – tversteeg 2013-03-08 14:17:29
此外,我不會''c_str()'...只是將'string'分配給'string'。如果'base64_encode'返回的'string'內存在你嘗試執行任務時被釋放(因爲它是一個臨時的),我不會感到驚訝(我可能是錯誤的,但我仍然不會調用'.c_str()',因爲它阻止了正確的移動語義)。 – Cornstalks 2013-03-08 14:19:59