c - 读取位并将它们放入整数 [C]
问题描述
我真的是 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 位
- 您使用按位 AND(又名 &),而您应该使用按位 OR(又名 |)
因此,假设HAL_GPIO_ReadPin
返回0
or 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
}
现在从引脚读取的第一个位在 0 的位位置collect_bits
,从引脚读取的第二个位在 1 的位位置collect_bits
,依此类推。
顺便说一句:您必须确保unsigned int
系统上是 32 位
推荐阅读
- python - Python,如何从命令行捕获附加参数
- android - 如何在android应用程序中通过弹出框更改分享的背景颜色
- azerothcore - unraid 6.2 中 Docker 中的艾泽拉斯核心?
- r - 重命名不包括特定列集的列
- python - 自定义 Django REST 框架身份验证响应 {"detail": "Authentication credentials were not provided."}
- mysql - 保留最后 30 个值并删除其余值
- python - LSTM 算法对所有输入产生相同的结果
- javascript - JS将背景位置设置为数组中的随机数
- html - 全部使用:未设置;不会覆盖外部样式
- google-apps-script - 一段appscript代码运行缓慢?还是谷歌表格?