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

标签 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

最佳答案

您的代码有 3 个问题:

  • 您没有初始化collect_bits
  • 你的循环只读取 31 位
  • 在应该使用位或(又名|)的地方使用位与(又名&)

因此假设 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,依此类推.

顺便说一句:您必须确保 unsigned int 在您的系统上是 32 位的

关于c - 读取位并将它们放入整数 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445425/

相关文章:

c - 如何删除给定号码的第一位数字?

python - 在 Python 中对二进制文件列表执行按位运算的优雅方法是什么?

C - 有什么方法可以使用位检查来检查数字是否等于 1?

c++ - 如何获得第n位值

python - 如何在c或python中将数字的高8位移动7次?

C - 函数中的结构分配

c - 了解指针和 malloc

JavaScript trunc() 函数

c++ - 错误 LNK2005 : _main already defined in hold. 对象

C程序设置k个低位