我使用C#与protobuf的图书馆和下面的类一个.bin文件创建:如何读取C++中的.proto格式的二进制文件?
[ProtoContract]
class TextureAtlasEntry
{
[ProtoMember(1)]
public int Height { get; set; }
[ProtoMember(2)]
public string Name { get; set; }
[ProtoMember(3)]
public int Width { get; set; }
[ProtoMember(4)]
public int X { get; set; }
[ProtoMember(5)]
public int Y { get; set; }
}
相关的.proto文件看起来像
package TextureAtlasSettings; // Namespace equivalent
message TextureAtlasEntry
{
required int32 Height = 1;
required string Name = 2;
required int32 Width = 3;
required int32 X = 4;
required int32 Y = 5;
}
已经通过protoc.exe解析,产生TextureAtlasSettings.pb.cc和TextureAtlasSettings.pb.h。为C++。
我想读在C++所得二进制文件,所以我尝试下面的代码
TextureAtlasSettings::TextureAtlasEntry taSettings;
ifstream::pos_type size;
char *memblock;
ifstream file("Content\\Protobuf\\TextureAtlas0.bin", ios::in | ios::binary);
if (file.is_open())
{
size = file.tellg();
memblock = new char[size];
file.seekg(0, ios::beg);
file.read(memblock, size);
file.close();
fstream input(&memblock[0], ios::in | ios::binary);
if (!taSettings.ParseFromIstream(&file))
{
printf("Failed to parse TextureAtlasEntry");
}
delete[] memblock;
}
上面的代码将一直触发printf的。我如何正确读取文件,以便它可能被反序列化?
驾驶室您尝试使用可选,而不是必需的?此外:protobuf网有一个GetProto方法,应该abl来帮助给代表.proto架构 –
设置它为可选做的伎俩,谢谢。 – user1423893