将vector <unsigned char =“”>转换为const unsigned char * </unsigned>

时间:2013-03-08 14:12:58

标签: c++ opencv casting char base64

我正在尝试创建一个应用程序,其中OpenCV中的Mat图像使用cv::imencode编码为base64字符串。为此,我必须将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 unsigned char之间的转换会导致结果混乱; base64_encode上一次工作。

1 个答案:

答案 0 :(得分:3)

一个主要问题是:

const char* s = base64_encode(reinterpret_cast<const unsigned char*>(buffer.data()), buffer.size()).c_str();

此处,base64_encode功能正在返回std::string。然后,您正在调用c_str()方法,该方法返回指向底层缓冲区的指针。但是,std::string然后立即超出范围,留下一个悬空指针。

此外,根本不需要reinterpret_cast。由于悬空指针,你正在遇到未定义的行为,这与演员表无关。

您应该将其更改为

std::string s = base64_encode(buffer.data(), buffer.size());