将矢量<无符号字符>转换为常量无符号字符*



我试图创建一个应用程序,其中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)

<标题> 更新

现在它不再产生任何错误了,但在转换的某个地方出错了;我解码后的输出和输入不一样,它主要由一个字符组成。这是当前脚本:

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之间的转换会弄乱结果;

一个主要问题是:

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

相关内容

  • 没有找到相关文章

最新更新