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.

Reply via email to