Skip site navigation (1) Skip section navigation (2)

Re: converting from bytea to integers

From: John DeSoi <desoi(at)pgedit(dot)com>
To: Daniel Verite <daniel(at)manitou-mail(dot)org>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: converting from bytea to integers
Date: 2009-04-21 02:13:53
Message-ID: 456F3E56-7596-4310-8FE5-BB06CEA561AA@pgedit.com (view raw or flat)
Thread:
Lists: pgsql-general
On Apr 20, 2009, at 5:23 PM, Daniel Verite wrote:

> get_byte()?
>
> mailtest=> \set e '\'\12\15\107\20\'::bytea'
>
> mailtest=> select get_byte(:e,0),get_byte(:e,1),get_byte(:e, 
> 2),get_byte(:e,3);
> get_byte | get_byte | get_byte | get_byte ----------+---------- 
> +----------+----------
>      10 |	  13 |	     71 |	16

That's what I ended up with. My first attempts at it were unsuccessful  
because I did not notice that get_byte uses zero indexing. Earlier in  
the routine I extracted bytes using substring and just assumed they  
used the same indexing. They don't. It might be worthy of a  
documentation note -- it seems easy to miss if you have not used the  
binary functions before.

I generated the integer from the bytes using something like this:

b1 = get_byte(p_array, i+3);
b2 = get_byte(p_array, i+2);
b3 = get_byte(p_array, i+1);
b4 = get_byte(p_array, i);
val = (b1 << 24) + (b2 << 16) + (b3 << 8) + b4;


Thanks,


John DeSoi, Ph.D.


In response to

pgsql-general by date

Next:From: Albe LaurenzDate: 2009-04-21 10:36:44
Subject: Re: trouble with to_char('L')
Previous:From: Sam MasonDate: 2009-04-21 01:13:58
Subject: Re: Doubt about join clause

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group