Apologies for incorrect values of _has_bits in my prev message. Those
were the addresses of the variable _has_bits.

But the behvaior of the _has_bits is same. When I initialize the
header while writing using cMsg.mutable_header(), it sets the 3rd bit
in _has_bits and the value of _has_bits is 7 ( = 0x0111). But when I
read the cMsg in my reader program, value of _has_bits is 3 ( =
0x0011) 3rd bit is not set and hence the header message is not read.

I am further looking into the code to understand why this bit is not

Appreciate it if you could tell me what am I doing wrong in this case.


On Dec 22, 10:07 am, alok <alok.jad...@gmail.com> wrote:
> Hi,
>  I have a nested message that i am trying to read using protocol
> buffers. Message looks like as below
> <code>
> 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;
> }
> </code>
> 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
> cMsg.ParseFromCodedStream(coded_input);
> 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.
> -Alok

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