使用1 int发送2个数字

时间:2011-03-13 17:58:07

标签: c

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

我假设我必须转换为二进制/十六进制和一些屏蔽?

任何想法都会受到赞赏。

由于

7 个答案:

答案 0 :(得分:4)

您可以编码两个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)。

答案 1 :(得分:2)

如果您发送的号码在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;

答案 2 :(得分:1)

您的号码在哪个范围内?如果它们可以适合16位,那么你可以打包32位int中的两个。类似于i = (n1 << 16) | (n2 &0xffff)

答案 3 :(得分:1)

您可以将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;
}

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我认为Unions in c 会做的。你也可以去Bit Fields in C