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 <pyth...@gmail.com 
> <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 <pyth...@gmail.com> 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 <pyth...@gmail.com> 
>>>>> 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 protobuf+u...@googlegroups.com.
>>>>>> To post to this group, send email to prot...@googlegroups.com.
>>>>>> 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 protobuf+u...@googlegroups.com.
>>>> To post to this group, send email to prot...@googlegroups.com.
>>>> 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 protobuf+u...@googlegroups.com <javascript:>.
>> To post to this group, send email to prot...@googlegroups.com 
>> <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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to