You should be able to encode ipv4 in 4 bytes, making fixed32 ideal, since
you can avoid the length prefix. For ipv6, you're going to need 16 bytes,
so "bytes" is probably your best bet, since it will only require a single
header. You can then create a union of those:
oneof ip_addr {
fixed32 v4 = 1;
bytes v6 = 2;
}
That seems pretty optimal to me.
Marc
On Wed, 18 Jul 2018, 08:16 sanjana gupta, <[email protected]>
wrote:
> I read that protobuf has a type called "*bytes*" which can store
> arbitrary number of bytes and is the equivalent of "C++ string".
>
> The reason why I don't prefer to use "bytes" is that it expects input as a
> C++ string i.e., boost IP will need to be converted to a string.
>
>
> Now my concern lies here : I want to perform serialize and send the
> encoded protobuf message over TCP socket. I want to ensure that the *encoded
> message size is as small as possible*.
>
>
> Currently, I am using the below .proto file :
>
> syntax = "proto2";
>
> message profile
>
> {
>
> repeated *uint32* localEndpoint = 1;
>
> repeated *uint32* remoteEndpoint = 2;
>
> }
>
>
> In order to save boost IP in the protobuf message, I am first converting
> boost IP into byte-format array by using
> "boost::asio::ip::address_v4::to_bytes()". So for a v4 IP, resultant array
> size is 8. Then I am converting 1st 4 bytes from the resultant byte-array
> into one uint32_t number and then storing in "localEndpoint" field of the
> protobuf message. Likewise, I repeat for the next 4 bytes. I am taking 4
> bytes at a time so as to utilize full 32 bits of the uint32.
>
>
> Hence for a v4 address, 2 occurrence of "localEndpoint" field is used.
> Similarly, for a v6 address, 4 occurrence of "localEndpoint" field is used.
>
>
> Please allow me to highlight that if I had used "bytes" here, my input
> string itself would have been of size 15 bytes for a v4 ip like
> 111.111.111.111
>
>
> Using uint32 instead of "bytes" does save me some encoded-data-size but I
> am looking for a more efficient protobuf type requiring lesser number of
> bytes.
>
>
> Sorry for a long description but I wanted to explain my query in details.
> Please help me.. Thanks a lot in advance :)
>
> --
> 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.