标准::矢量<uchar>到字符* 数据丢失

std::vector<uchar> to char* data loss

本文关键字:数据 字符 uchar 矢量 lt 标准 gt      更新时间:2023-10-16

我使用 cv::imencodecv::Mat作为 image/jpeg编码为 vector<uchar>,现在我想将该向量转换为type char *

vector<uchar> buf;
// print buf to stdout to ensure that data is valid here
for (auto c : buf)
    cout << c << endl;
// cast vector to char
char *ch = reinterpret_cast<char*>(buf.data());
// print out value of char pointer
for(int i = 0; ch[i] != ''; i++)
    printf("log: %cn", ch[i]);

从这个问题中获取了矢量上的for循环。从std::vector<T>char *的演员阵容是从这个问题中获取的。

问题现在似乎在类型转换过程中似乎有一些数据丢失。buf包含有效的数据,我总是只获取????的值ch

有什么想法在这里发生了什么?

与向量一起工作时,一切都很好,因为à向量是一个具有显式大小的动态数组。因此,它可以包含空值。

但是,接下来,您使用一个零终止的未签名字符数组。因此,它停止了第一个Null字符。它在您的代码中甚至是明确的。

for(int i = 0; ch[i] != ''; i++)
    printf("log: %cn", ch[i]);

(相关部分是ch[i] != 0

这就是为什么您在第一个null字符之后放松所有内容的原因。