使用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位, in1
和in2
在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