Empequtar dos Short en un Int y viceversa

28/05/2004 - 16:41 por Gandalf | Informe spam
Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en una Int
(Int32) y luego volver a obtener los valores iniciales.

Un Saludo y Gracias.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
28/05/2004 - 17:05 | Informe spam
short a,b;
int i = a<<16 | b;
a = i>>16;
b = i & 0xffff;


"Gandalf" wrote in message
news:
Mostrar la cita
Int
Mostrar la cita
#2 A.Poblacion
28/05/2004 - 17:27 | Informe spam
Otra respuesta, esta vez en plan de "broma" (funciona pero desde luego no es
recomendable):

//Para combinar dos valores:
int i;
short a=..., b=...;
unsafe {
short *p = (short *) &i;
*p = a;
*++p = b;
//En este momento, i contiene a y b
}

//Para sacar los valores:
int i=...;
short a,b;
unsafe {
short *p = (short *) &i;
a = *p;
b = *++p;
}



"A.Poblacion" wrote in
message news:uDYm$
Mostrar la cita
#3 Gandalf
28/05/2004 - 17:45 | Informe spam
A ver: lo siguiente NO funciona:
short a=-10,b=-5;

int i = a<<16 | b;

a = (short)(i>>16);

b = (short)(i & 0xffff);

En la variable a se queda un -1 y no un -10.

al hacer el desplazamiento de bit el Compilador genera un warning: Operador
OR bit a bit usado en un operando con extensión de signo.

Un Saludo y gracias por tu respuesta.
#4 Gandalf
28/05/2004 - 18:00 | Informe spam
Esto si funciona, pero como tu dices, no creo que sea recomendable
"A.Poblacion" escribió en
el mensaje news:O6j$
Mostrar la cita
es
Mostrar la cita
una
Mostrar la cita
#5 Gandalf
28/05/2004 - 18:52 | Informe spam
Empaquetor dos int en un long y viceversa:
int hi = -5;

int lo = -6;

//long val = (((long)hi) << 32) | lo; // Warning: CS0675

long val = (((long)hi) << 32) | ((uint)lo); // correct

hi=(int)(val>>32);

lo=(int)(val & 0xffffffff);

Empaquetar dos short en un int y viceversa:

short a=-20,b=-6;

int i = (((int)a)<<16) | ((ushort)b);

a = (short)(i>>16);

b = (short)(i & 0xffff);

Point pt=new Point(i); //otra forma de obtener los valores: pt.x==-6 y
pt.y==-20

Un Saludete



"Gandalf" escribió en el mensaje
news:
Mostrar la cita
Int
Mostrar la cita
Ads by Google
Search Busqueda sugerida