我正在使用winsock来接收256位长的udp消息。我使用8个32位整数来保存数据。

int32_t dataReceived[8];

recvfrom(client, (char *)&dataReceived, 8 * sizeof(int), 0, &fromAddr, &fromLen);


我需要抓取特定的位,例如位#100,#225,#55等。因此,某些位将在dataReceived [3]中,某些位在dataReceived [4]中,等等。

我当时想我需要对每个数组进行位移,但是事情变得复杂了。我是不是都错了?

最佳答案

为什么将int32_t类型用于缓冲元素而不是uint32_t

我通常使用这样的东西:

int bit_needed = 100;
uint32_t the_bit = dataReceived[bit_needed>>5] & (1U << (bit_needed & 0x1F));


或者,您可以使用此代码(但不适用于带符号整数的登录):

int bit_needed = 100;
uint32_t the_bit = (dataReceived[bit_needed>>5] >> (bit_needed & 0x1F)) & 1U;


在其他答案中,您只能访问每个int32_t中的低8位。

关于c++ - 如何从256位消息中获取特定位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38887840/

10-12 04:43