2012-05-30 5 views
0

Я пытаюсь использовать JSON cpp с VS2008.Двоичные данные JSONCPP

Может ли кто-нибудь сказать мне, возможно ли упаковать двоичные данные в формат JSON? Я читаю файл изображения в char* buffer и помещаю его в JSON::Value. Но когда я пытаюсь разобрать его, я не нахожу содержимое буфера в объекте JSON.

Код выглядит следующим образом.

Json::Value root; 
    Json::Reader reader; 
    Json::StyledWriter writer; 
    int length; 
    char * buffer; 
    ifstream is; 
    is.open ("D:\\test.j2k", ios::binary); 

    // get length of file: 
    is.seekg (0, ios::end); 
    length = is.tellg(); 
    is.seekg (0, ios::beg); 

    // allocate memory: 
    buffer = new char [length]; 

    // read data as a block: 
    is.read (buffer,length); 
    root["sample"] = *buffer; 
    writer.write(root); 
    cout << root; 
    const string rootAsString = root.toStyledString(); 
    cout << rootAsString << endl; 

Поскольку я новичок в VC++, я не уверен, является ли чтение файла изображения на символ * буфер правильно/неправильно. Пожалуйста, дайте мне знать, что не так с кодом. Благодарю.

ответ

1

Вы должны закодировать его, потому что JSON является подмножеством формата структуры javascript, поскольку он появляется в исходном коде javascript.

Наиболее часто используемой кодировкой для двоичных данных в JSON является Base64. Я использую его (на других языках, чем C++) для кодирования изображений без проблем. Вы просто должны префикс закодированного изображения data:image/png;base64, (предположим, что это png), чтобы он автоматически декодировался в javascript, если вы установите его в src изображения.

EDIT: как и на любом другом языке, кодировка base64 на C++ проста. Вот библиотека: https://github.com/ReneNyffenegger/development_misc/tree/master/base64

+0

Вы можете объяснить в терминах кода выше? где я совершил ошибку? –

+0

Вы помещаете содержимое своего файла в свое значение, и вы попросите StyledWriter его закодировать. Как он должен знать, что он должен добавить префикс, который я предлагаю, и кодировать его в base64? –

+0

спасибо ... Я закодировал его в base64. Теперь работает отлично. –