как правильно написать сообщение protobuf в текстовом формате в файл - PullRequest
0 голосов
/ 23 октября 2018

Мой вопрос заключается в том, как правильно записать сообщение protobuf в текстовом формате в файл.В программе ниже я создаю объект NetParameter, который является полем сообщения в поле сообщения в caffe.proto.

Когда я вызываю print() и PrintToString(), они возвращают ошибку.

Я могу напечатать на консоли текст сообщения с помощью printf("%s", data.c_str());, но запись в файл записывается с пометкой?

#include <fcntl.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <google/protobuf/text_format.h>
#include <stdint.h>
#include <algorithm>
#include <fstream> // NOLINT(readability/streams)
#include <string>
#include <vector>
#include <string>
#include "caffe.pb.h"
#include <iostream>
#include <caffe/caffe.hpp>

using namespace std;
using google::protobuf::Message;
using google::protobuf::io::CodedInputStream;
using google::protobuf::io::CodedOutputStream;
using google::protobuf::io::FileInputStream;
using google::protobuf::io::FileOutputStream;
using google::protobuf::io::ZeroCopyInputStream;
using google::protobuf::io::ZeroCopyOutputStream;
using google::protobuf::TextFormat;


int main()
{
    caffe::NetParameter param;
    const char *filename = "./test.prototxt";

    int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1)
        cout << "File not found: " << filename;

    google::protobuf::io::FileOutputStream* output = new google::protobuf::io::FileOutputStream(fd);

    param.set_name("AlexNet");
    param.add_input_dim(0);
    param.add_input_dim(1);
    param.add_input_dim(2);
    param.set_input_dim(0, 3);
    param.set_input_dim(1, 3);
    param.set_input_dim(2, 3);

    std::string data;
    bool success = google::protobuf::TextFormat::PrintToString(param, &data);
    std::cout << "bool is " << success << std::endl;
    printf("%s", data.c_str());

    bool success1 = google::protobuf::TextFormat::Print(param, output);
    std::cout << "bool is " << success << std::endl;



    close(fd);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...