C++ 如何从256位消息中获取特定位?

C++ 如何从256位消息中获取特定位?,c++,c,winsock,C++,C,Winsock,我正在使用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]中,等等 我想我需要对

我正在使用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]中,等等


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

从0开始计算位和字节时:

int bit_needed = 100;
因此:

int字节=int(需要位/8);
int位=所需的位\u%8;

int the_bit=dataReceived[byte]&(1您可以制作一个小函数来完成这项工作

uint8_t checkbit(uint32_t *dataReceived, int bitToCheck)
{
  byte = bitToCheck/32;
  bit = bitToCheck - byte*32;
  if( dataReceived[byte] & (1U<< bit))
    return 1;
  else 
    return 0;
}
uint8\u t校验位(uint32\u t*dataReceived,int-bitToCheck)
{
字节=位检查/32;
位=位检查-字节*32;

如果(dataReceived[byte]&(1U为什么要对缓冲区元素使用
int32\u t
类型而不是
uint32\u t

我通常会这样使用:

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

其他回答,你只能访问每个It32的低位8位。

< P>你可以使用C或C++中的宏来检查特定的位:

#define bit_is_set(var,bit)     ((var) & (1 << (bit)))

请显示实际的代码,试图做你所描述的事情。如果我们看不到它,我们不能评论它是好的、坏的还是丑陋的。请也回顾一下这个,看看什么信息是期望的:C或C++,你使用哪种语言?<代码> sieZof(in 32)
!数组有
int32\u t
元素,而不是
int8\u t
。如果
bit\u needed=100
,则数组名问题中有索引12作为答案。数组元素类型为
int32\u t
int8\u t
int bit_needed = 100;
uint32_t the_bit = (dataReceived[bit_needed>>5] >> (bit_needed & 0x1F)) & 1U;
#define bit_is_set(var,bit)     ((var) & (1 << (bit)))
if(bit_is_set(message,29)){
//bit is set
}