我真的是 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
返回 0
或 1
,您可以:
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/