读取位并将它们放入整数[C]

时间:2018-05-21 09:10:42

标签: c bit-manipulation bit

我是C的新手,我在位操作方面遇到了麻烦,我读了很多关于它的信息,看起来它是C的难点之一,有人可以解释我如何收集32位然后将它们分配给无符号的整数。

    unsigned int collect_bits;     // define var
    for (int i = 0;i < 31; i++)    // loop for 32bits
    {
    collect_bits &= HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9);  //read PORTC current bit and assign it to collect_bits    
    }

我知道上面的代码是错误的,但我不知道如何将PORT中的位分配给var

2 个答案:

答案 0 :(得分:3)

您的代码有3个问题:

  • 您未初始化collect_bits
  • 你的循环只读31位
  • 你使用位智能(又名&amp;)你应该使用位智能(又名|)

假设HAL_GPIO_ReadPin返回01,您可以这样做:

unsigned int collect_bits = 0;
for (int i = 0; i < 32; i++)
{
    unsigned int current_bit = HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9);
    collect_bits |=  current_bit << i;  // Shift current_bit to position i and
                                        // put it into collect_bits using bit wise OR
}

现在从引脚读取的第一位位于collect_bits的位位置0,从引脚读取的第二位位于collect_bits的位位置1,依此类推。

BTW:您必须确保unsigned int是系统上的32位

答案 1 :(得分:0)

collect_bits未初始化,

试试这个

unsigned int collect_bits = 0;     // define var
for (int i = 0;i < 31; i++)    // loop for 32bits
{
    collect_bits |= HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9);  //read PORTC status  and assign it to collect_bits    
}