Usando 1 int para enviar 2 números

Estoy trabajando con un sistema por el cual puedo enviar 1 32 bit int a la vez. Sin embargo necesito enviar dos números a la vez. ¿Cuál es la mejor manera de hacer esto en el estándar C?

¿Supongo que tendré que hacer alguna conversión a binario / hex y algún enmascaramiento?

Cualquier idea sería apreciada.

Gracias

Puede codificar dos números sin signo de 16 bits como este:

unsigned int out = (in1 << 16) | in2; 

Y decodifíquelos así:

 unsigned int in1 = out >> 16; unsigned int in2 = out & 0xFFFF; 

Todo esto supone que int es de al menos 32 bits, que in1 e in2 están en el rango 0-65535, y que un unsigned int se puede enviar correctamente (wrt endianness).

Si los números que está enviando están entre 0 y 65535, empáquelos en el int de 32 bits que puede enviar:

 unsigned int n1 = 42; unsigned int n2 = 1600; unsigned int numbertosend = (n1 << 16) | n2; 

En el lado de recepción, desempaquetar el número

 unsigned int n1 = receivednumber >> 16; unsigned int n2 = receivednumber & 0xFFFF; 

¿Qué rango son tus números? Si pueden caber en 16 bits, entonces puede empaquetar dos de esos en su int de 32 bits. Algo como i = (n1 << 16) | (n2 &0xffff) i = (n1 << 16) | (n2 &0xffff) .

Podría codificar 2 números de 16 bits en un número de 32 bits. Por ejemplo:

 int32 encode(int16 numA, int16 numb) { int 32 result = numA << 16 | numB; return result; } int16 decodeNum1(int32 num) { return (num >> 16) & 0xFFFF; } int16 decodeNum2(int32 num) { return (num) & 0xFFFF; } 

Si los dos números que desea enviar son primos, puede multiplicarlos y enviar el producto y, en el servidor, calcularlos para obtener el resultado.

; p (inspirado en la ambigüedad de la pregunta)

Suponiendo que desea enviar 2 números de 16 bits, probablemente podría hacer algo como esto:

 unsigned int a, b, toSend; // Give a and ba value... toSend = ( a << 16 ) | b; 

Creo que los sindicatos en c harían el trabajo.