I *think* I got it - bottom line is serialized byte array, in a string or not, can contain NULL, and strlen() will not work here (string size) does work.
thanks for your help and reply. oliver On Tuesday, September 18, 2018 at 4:49:32 PM UTC-4, Adam Cozzette wrote: > > That is true that std::string will make sure to put a null character right > after the end of your string, so if you have a string s then > s.data()[s.size()] will be '\0'. However, there is nothing preventing null > characters from also appearing inside the string itself. So if you're > working with binary data (such as serialized protocol buffers), you can't > really treat the data as a C-style string, even if it's stored in a > std::string. > > On Tue, Sep 18, 2018 at 1:35 PM Oliver Wang <[email protected] > <javascript:>> wrote: > >> actually, this is also the part that confuses me some: suppose I >> serialize it to string. string.data() will return me a c-string according >> to c++ reference (I read it somewhere that since c++11, string.c_str() and >> string.data() both will return null-terminated string). Even >> protocolbuf serialized array can contain NULL, then it doesn't quite make >> sense to me yet - does string do something different behind the scene to >> make sure byte array now null-terminated, without breaking protocolbuf? >> does my line of thought make sense at all? >> >> >> On Tuesday, September 18, 2018 at 4:20:51 PM UTC-4, Adam Cozzette wrote: >>> >>> I don't have any experience with MPI, but I would recommend using >>> SerializeToString() instead of SerializeToArray(). SerializeToString() is >>> simpler and easier because you don't have to worry about creating an array >>> of the correct size. Once you have serialized to a std::string, you can >>> just call data() and size() on that to get access to the backing array and >>> size. Note that the serialized data might contain null characters within it. >>> >>> On Tue, Sep 18, 2018 at 1:10 PM Oliver Wang <[email protected]> wrote: >>> >>>> >>>> mainly, I need to pass serialized array to MPI to transfer - MPI needs >>>> type information and size information, MPI_CHAR will treat the buffer as >>>> char*, MPI_BYTE will treat the buffer as byte stream. I am a bit fuzzy on >>>> which type I should use? Also, if it is a c-string, maybe I don't have to >>>> pass "size" information along with it. Given your earlier reply, this is >>>> not the case. >>>> >>>> Thanks >>>> Oliver >>>> >>>> >>>> >>>> >>>> On Monday, September 17, 2018 at 4:13:44 PM UTC-4, Adam Cozzette wrote: >>>>> >>>>> That method will serialize the message into the provided array in the >>>>> data argument. It will not really generate a C-style string, because >>>>> the output will not be delimited by a null character. What are you trying >>>>> to do exactly? >>>>> >>>>> On Mon, Sep 17, 2018 at 12:18 PM Oliver Wang <[email protected]> >>>>> wrote: >>>>> >>>>>> hi, >>>>>> >>>>>> It wasn't clear to me, if this following call will generate a >>>>>> c-string? if not, is there a way to do that? >>>>>> >>>>>> >>>>>> https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message_lite?csw=1#MessageLite.SerializeToArray.details >>>>>> >>>>>> thanks >>>>>> >>>>>> oliver >>>>>> >>>>>> -- >>>>>> 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 https://groups.google.com/group/protobuf. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>> 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 https://groups.google.com/group/protobuf. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >> 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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at https://groups.google.com/group/protobuf. >> For more options, visit https://groups.google.com/d/optout. >> > -- 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 https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
