On Tue, Mar 11, 2014 at 11:09 PM, Ke Wang <[email protected]> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to