Я использовал cv::imencode
для кодирования cv::Mat
, как image/jpeg
в vector<uchar>
теперь я хочу, чтобы преобразовать этот вектор к типу char *
.станд :: вектор <uchar> на символ * потери данных
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] != '\0'; i++)
printf("log: %c\n", ch[i]);
для цикла над вектором берется из this question. Отливка от std::vector<T>
до char *
взята из this question.
Проблема заключается в том, что при преобразовании типов, по-видимому, наблюдается некоторая потеря данных. В то время как buf
содержит действительные данные, я всегда получаю только значение ????
от ch
.
Любые идеи, что здесь произошло?
Уверены, что в буфере есть только печатные символы? –
Зачем бросать в 'char *' not 'unsigned char *'? Какие данные находятся в 'buf'? Что вы на самом деле пытаетесь сделать или это просто вопрос интереса? – ilent2
Это часть модуля [cgo] (https://golang.org/cmd/cgo/), который выполняет некоторую обработку изображений с помощью [opencv] (http: // http: //opencv.org). Таким образом, 'buf' содержит это обработанное изображение как jpeg. Однако я думаю, что вставка полного файла будет отвлекать от реальной проблемы. – bodokaiser