Как сохранить бинарные данные в json?

261
28 апреля 2017, 20:27

Здравствуйте! Возник такой вопрос: как сохранить бинарный файл (png) в памяти в поле Json::value (библиотека jsoncpp)? Мне это нужно для того, чтоб потом положить полученный json в couchbase с использованием libcouchbase. Бинарный файл я считываю в std::string и конвертирую в char * при помощи

std::ifstream fin("image.png", std::ios::binary);
std::string data;
data.reserve(1000000);
std::copy(std::istreambuf_iterator<char>(fin),
      std::istreambuf_iterator<char>(),
      std::back_inserter(data));
char *a = (char *)malloc(sizeof(char) * data.length());
unsigned int i = 0;
for (i = 0; i < data.size(); i++)
    a[i] = (unsigned char)(data[i]);

Поскольку я знаю длину строки, я могу вывести её полностью (просто вывод a не работает, т.к. в a есть символы конца строки). В результате a записывается и считывается из couchbase без изменений, это я проверил при помощи вывода в файл с получением картинки, тождественной исходной. Но мне нужно вместе с ней хранить ещё некие заголовки (тоже строки), поэтому хочется использовать json. Я пытаюсь сделать

Json::Value jsonvalue;
jsonvalue["value"] = a;

но при выводе jsonvalue["value"] в файл полученный файл уже не тождественен исходному. Подскажите, пожалйуста, что делать. Предполагаю, что я придумал неверное в принципе решение, как хранить картинки в couchbase вместе с заголовками. Но мне хотелось бы иметь возможнось в пределах одного запроса к базе получать как картинку, так и заголовки, поэтому я так поступил.

READ ALSO
Как написать код?

Как написать код?

Есть число n, а также массив, в котором дано m чисел

198
Запуск программы

Запуск программы

Киньте пример пожалуйста, как запустить программу на клиентской машине используя javascript, и вообще можно ли так??? вроде телеграмм таким образом...

201
ротация трёх баннеров

ротация трёх баннеров

Нужно сделать на сайте ротацию трёх баннеров:

219