I have a nested message that i am trying to read using protocol
buffers. Message looks like as below


message HeaderMessage {
  required double timestamp = 1;
  required string ric_code = 2;
  required int32 count = 3;
  required int32 total_message_size = 4;

message CustomMessage {
  required string field_name = 1;
  required double value = 2;
  optional HeaderMessage header = 3;


Here, I am setting the header field in the CustomMessage and writting
the custom message to binary output file. I know for sure that the
message is written properly to the binary file because I am able to
retrive it properly using the C# library (protobuf-net) to read the
binary file.

I am trying to read the same file using C++ protocol buffers library.
But when i read the object from coded_stream


I see that the header is not set in the cMsg.

I looked inside protocol buffers library. While reading the object, it
checks for if header is set or not using the following function

inline bool CustomMessage::has_header() const {
  return (_has_bits_[0] & 0x00000004u) != 0;

Above function returns false and header object is not read.

When I am writing the object to binary file, value of _has_bits was
0x00fb6ff8 but when I am reading the custom message from the binary
file, this time the value of _has_bits is unchanged before and after
reading the object. This value is 0x0012fbcc.  For this value,
has_header() function returns false.

so when I call ParseFromCodedStream function, _has_bits value is not
read properly causing a problem in reading header object.

What am I doing wrong in this case? How to resolve this issue?

Thanks for your help.


You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to