c-二进制数据JSONCPP

我正在尝试在VS2008中使用JSON cpp.

谁能告诉我是否可以将二进制数据打包成JSON格式?我正在将图像文件读入char *缓冲区中,并将其放入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的新手,所以我不确定将图像文件读取到char * buffer是否正确.请让我知道代码有什么问题.谢谢.

解决方法:

您必须对其进行编码,因为JSON是javascript结构格式的子集,如javascript源代码中所示.

JSON中最常用的二进制数据编码是Base64.我使用它(使用c以外的其他语言)对图像进行编码没有问题.您只需为编码后的图像加上data:image / png; base64前缀(假设它是png),如果将其设置为图像的src,就可以在javascript中对其进行自动解码.

编辑:与其他任何语言一样,使用C语言进行base64编码很容易.这是图书馆:https://github.com/ReneNyffenegger/development_misc/tree/master/base64

上一篇:永久存储系统日志


下一篇:Systemd 进程管理教程