pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Christoph Haller <ch@rodos.fzk.de>
To: Volkan YAZICI <volkan.yazici@gmail.com>
Cc: PostgreSQL Interfaces <pgsql-interfaces@postgresql.org>
Subject: Re: Network Byte Order Coercion
Date: Wed, 18 May 2005 13:09:42 +0200
Message-ID: <428B2276.7C2FFF55@rodos.fzk.de> (raw)
References: <7104a73705051603121f1c35ab@mail.gmail.com>

Volkan YAZICI wrote:
> 
> Hi,
> 
> In libpq example program 3 (testlibpq3.c), an int4 field is converted
> to host byte order:
> 
> {{{
> /* Get the field values (we ignore possibility they are null!) */
> iptr = PQgetvalue(res, i, i_fnum);
> 
> /*
>  * The binary representation of INT4 is in network byte order,
>  * which we'd better coerce to the local byte order.
>  */
> ival = ntohl(*((uint32_t *) iptr));
> }}}
> 
> (As I saw while reading "An Essay on Endian Order" [1]) I'm not so
> familiar with byte orders, but what's the point of coercion in here?
> Should we do it in every integer field we retrieved? What's the
> [dis]advantages of this? I'd be so appreciated for any explanation.
> 
> [1] http://www.cs.umass.edu/~verts/cs32/endian.html
> 
> Regards.
> 

As long as binary results are retrieved, PG delivers the data 
always in network byte order (big endian), no matter what byte 
order the processor is actually using. 

On a machine using big endian, functions like ntohl do nothing. 
On little endian systems, ntohl reverses the byte order, so 
the result is correct. 

So, if you want to write portable code, you'll have to consider 
the byte order, otherwise the same code would produce different 
results on different machines (PC, MAC). 
In the end it's not at all a question of advantages versus 
disadvantages, you'll just have to do it. 
HTH 

Regards, Christoph



view thread (2+ messages)

Message-ID: <428B2276.7C2FFF55@rodos.fzk.de>
Permalink:  ../428B2276.7C2FFF55@rodos.fzk.de/
Also on:    postgresql.org/message-id/428B2276.7C2FFF55@rodos.fzk.de

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: ch@rodos.fzk.de, volkan.yazici@gmail.com
  Subject: Re: Network Byte Order Coercion
  In-Reply-To: <428B2276.7C2FFF55@rodos.fzk.de>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox