Archive

Archive for September, 2006

I2P en P2I

September 14th, 2006 No comments

Hoe zet je in nette ansi c code een integer om in een pointer, en vice versa?

#define I2P(i) ((void *)((char *)0 + (i)))
#define P2I(p) ((int)((char *)(p) - (char *)0))

I2P: char adres 0 + integer adres is char adres van i. Cast naar void pointer zodat het resultaat in elke pointer var past.
P2I: cast pointer naar char pointer (kleinste adressering), haal daar char adres 0 vanaf om een integer waarde te verkrijgen. De cast naar int zit er bij omdat je in c in principe altijd het beste int kunt gebruiken, dat is op elk systeem het snelste type.

Tags: , , , ,