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
set.

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

Regards,
Alok


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 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to