Thanks, but when I print out the char* using string.data(), it got 
truncated too. Later, I need to transfer this char* through TCP socket, 
which apparently cannot be decoded right at the server side. Did I do 
something wrong with the definition of the message?

Ke

On Wednesday, March 12, 2014 5:28:50 AM UTC-5, Ilia Mirkin wrote:
>
> On Tue, Mar 11, 2014 at 11:09 PM, Ke Wang <kewa...@gmail.com <javascript:>> 
> wrote: 
> > Hi all, 
> > 
> > I am using google protocol buffer to transmit complex data structures 
> over 
> > socket. Here is the .proto file: 
> > 
> > message MatrixMsg 
> > { 
> > required string msgType = 1; 
> > optional int64 count = 2; 
> > optional string extraInfo = 3; 
> > message TaskMsg 
> > { 
> > required string taskId = 1; 
> > required string user = 2; 
> > required string dir = 3; 
> > required string cmd = 4; 
> > required int64 dataLength = 5; 
> > } 
> > repeated TaskMsg tasks = 4; 
> > } 
> > 
> > I serialized a MatrixMsg to string through SerializeAsString(), and the 
> > string length is 500. Now, I want to convert the string to char* in 
> order to 
> > send it through socket. However, when I converted to char* through 
> > string.c_str(), the string got truncated. I printed out the string, and 
> > figured out there are white space in it. How do I get a char* that is 
> > exactly matches the string? Thanks! 
>
> If you have a std::string, you can get at the data with str.data(), 
> and the length is str.length(). There can be null characters in the 
> output, so things like strlen won't produce useful results. [And 
> there's some subtle difference between .data() and .c_str() but I 
> don't quite remember what it is, and it might only be a theoretical 
> difference and not an actual one given the gcc implementation. My 
> memory is a little hazy on the topic though.] 
>
> HTH, 
>
>   -ilia 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to