使用1 int发送2个数字

我正在使用一个系统,我可以一次发送1 32位int。 但是我需要一次发送两个号码。 在标准C中执行此操作的最佳方法是什么?

我假设我将不得不做一些转换为二进制/hex和一些掩码?

任何想法,将不胜感激。

谢谢

你可以编码两个16位无符号数,如下所示:

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

并像这样解码它们:

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

所有这些假设int至少为32位, in1in2在0-65535范围内,并且unsigned int可以正确发送(wrt endianness)。

如果您发送的数字介于0到65535之间,则只需将它们打包到您可以发送的32位数组中:

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

在接收方,打开号码

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

你的号码是多少? 如果它们可以适合16位,那么你可以打包32位int中的两个。 像i = (n1 << 16) | (n2 &0xffff) i = (n1 << 16) | (n2 &0xffff)

您可以将2个16位数字编码为32位数字。 例如:

 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; } 

如果您要发送的两个数字都是素数,您可以将它们相乘并发送产品,然后在服务器上对它们进行因子分析以获得结果。

; p(受问题含糊不清的启发)

假设您要发送2个16位数字,您可能会执行以下操作:

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

我认为c中的工会会做这个工作。你也可以选择C中的Bit Fields