我正在使用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/