On Tuesday, July 31, 2018 at 6:10:27 AM UTC-7, sanjana gupta wrote:
>
> Hello Marc,
>
> I wanted to let you know that I tried using *fixed32 and fixed64*
> protobuf types and it has helped me save quite some bytes on the encoded
> data size. Allow me to show the protobuf message I created which
Hello Marc,
I wanted to let you know that I tried using *fixed32 and fixed64* protobuf
types and it has helped me save quite some bytes on the encoded data size.
Allow me to show the protobuf message I created which is capable for
storing one or multiple v4/v6 IPs :
message IpAddress
{
Use a bytes field: 4 for IPv4, 16 for IPv6.
Ideally, you should use an IP address library with a "packed bytes as
std::string" input/output.
The in_addr/in6_addr types are stored as 4 or 16 bytes in RAM.
--
You received this message because you are subscribed to the Google Groups
"Protocol
Thanks Marc, I am gonna try fixed32.
I will update on my findings.
On Wed, Jul 18, 2018, 15:40 Marc Gravell wrote:
> The first step, then, is to find how to get your ipv4 in a 4 byte
> std::string rather than a 15 byte std::string - I can't advise on that, but
> it should absolutely be
The first step, then, is to find how to get your ipv4 in a 4 byte
std::string rather than a 15 byte std::string - I can't advise on that, but
it should absolutely be possible. You don't need it as ASCII - you just
want the bytes.
As for will it be longer? No, especially when compared to uint32; a
I would like to understand from the protobuf generated API point of view:
If I have,
repeated bytes localEndpoint = 1;
The generated file profile.pb.h shows me the following APIs to add+set
values in it :
// repeated bytes localEndpoint = 1;
* inline void add_localendpoint(const
I would be amazed if there isn't a way of getting the raw underlying bytes
from the IP address, rather than the text (ASCII). The address
111.111.111.111 is literally the 4 bytes with decimal values 111, 111, 111
and 111. No ASCII required.
On Wed, 18 Jul 2018, 10:28 sanjana gupta,
wrote:
> Hey
Hey Marc,
I am sorry if I am repeating my words. Please enlighten me on this thing :
"bytes" requires me to give a std::string (c++) value as input. The problem
with string for me is that a usual 4-byte ipv4 address like 111.111.111.111
becomes 15-bytes string "111.111.111.111"
Having said
At that point I'd probably use "repeated bytes", then. It'll cost you an
extra byte on v4 addresses, but it is simple.
On Wed, 18 Jul 2018, 09:36 sanjana gupta,
wrote:
> Thanks Marc for your reply! By mistake I wrote 8-bytes for ipv4. I have
> corrected it as 4-bytes in my question. Thanks for
Thanks Marc for your reply! By mistake I wrote 8-bytes for ipv4. I have
corrected it as 4-bytes in my question. Thanks for that :)
One thing I want to ask you is that can I use "oneof" if my field
"localEndpoint" is repeated?
I mean to say that my one "profile" message can have any among :
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 {
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
12 matches
Mail list logo