Boost logo

Boost Users :

From: Carlo Wood (carlo_at_[hidden])
Date: 2004-08-31 08:41:33


On Tue, Aug 31, 2004 at 02:27:02PM +0300, Peter Dimov wrote:
> >A general "binary serialization class" would never know
> >where builtin-variables begin and end (or what type they
> >are) and therefore cannot swap bytes on Big-Endian machines.
>
> You may be right, depending on the meaning of "general", but useful binary
> serializers do exist. You just need to decide how to represent the built-in
> types. For example, I've chosen that the external representation of a char
> is 8 bits, a short 16, int and long 32. This is perfectly portable, as long
> as the values of my variables do not exceed these limits.

What does size have to do with endianness?
if you have the following struct:

struct Data {
  char c1;
  char lt[3];
  int s;
  unsigned short p1;
  unsigned short p2;
  bool init;
  bool flags[5];
  unsigned char t[8];
};

Then how would your general (== does not know anything about the
internals of 'Data') serializer write that to a TCP/IP socket
when running on a Big-Endian machine, such that both Big-Endian
and Little-Endian machines can read the result from the
network?

-- 
Carlo Wood <carlo_at_[hidden]>

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net