C/Visual C - Almacenar en un long dos int

 
Vista:

Almacenar en un long dos int

Publicado por aisbel (1 intervención) el 08/05/2009 18:13:39
Hola a todos,

tengo una duda que no consigo resolver, a ver si me pueden ayudar:

Tengo las siguientes variables:

int x;
int y;
long coordenadas;

Me gustaría, ya que los enteros ocupan 2B y los long 4B, almacenar el primer entero (x) en los primeros 2B del long, y el segundo entero (y) en los 2B de más peso del long.

He probado varias formas, lo que intento hacer es algo así:

coordenadas= 0xFFFF0000L & x;
coordenadas= coordenadas & (y<<32);

Gracias de antemano :))
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Almacenar en un long dos int

Publicado por fernando.gomez (1603 intervenciones) el 08/05/2009 20:21:32
No necesariamente los int son de 2 bytes y los longs de 4, por lo menos no está garantizado por el estándar (y dado que no mencionas qué compilador empleas, no hay forma de saber de antemano).

En fin, asumamos que tu aseveración es cierta.

En tal caso, puedes emplear memncpy.

int x = 10;
int y = 20;
long coord = 0L;

memncpy(&coord, &x, 2);
memncpy(&coord + 2, &y, 2);

Con la primera llamada a memncpy, copiamos los dos bytes de x iniciando en la posición 0 (primer byte) de coord. La segunda llamada copia los tercer y cuarto bytes iniciando en la posición 2 (tercer byte) de coord. Y listo.

Sin embargo no entiendo qué quieres lograr al complicarte la vida de esta manera. Es más facil crear una estructura:

struct Coord { int x; int y; };

y listo. Las estructuras de C (y las estructuras de C++ que sean POD) almacenan sus variables en direcciones contínuas de memoria, así que (sin tomar en cuenta cuestiones de alineación de bits) mi estructura Coord mide (bajo el escenario que propusiste) los mismos bytes que tu variable long.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar