【发布时间】:2022-05-10 09:45:46
【问题描述】:
我正在从实时计数器中读取秒作为 BCD 数据,第 7 位不用于此。
使用类似的在线示例,我能够将uint8_t BCD 数据转换为人类可读的 (0 - 59) 秒。
#define PCF8563_BCD_LOWER_MASK 0x0f
#define PCF8563_BCD_UPPER_MASK_SEC 0x70
#define PCF8563_BCD_UPPER_SHIFT 4
uint8_t raw_seconds = get_raw_seconds();
int seconds = (raw_seconds & PCF8563_BCD_LOWER_MASK) + (((raw_seconds & PCF8563_BCD_UPPER_MASK_SEC) >> PCF8563_BCD_UPPER_SHIFT) * 10);
我想对分钟、小时等做同样的事情(它们也都是 BCD 格式)。我觉得我知道该怎么做;移位/删除第 7 位(几分钟)并将 BCD 转换为十进制 - 但我无法弄清楚如何在代码中执行此操作。
从 BCD 转换为十进制并不是问题(有一个功能),未使用位的移位/删除让我失望。
-
您想删除(或者更确切地说,忽略)第 7 位并保留第 6-0 位。考虑哪个位掩码可以实现这一点。你不需要改变任何东西。
-
@mkrieger1 这正是我所需要的,谢谢。澄清代码我的问题是从其他示例中组合起来的,我无法弄清楚它是如何工作的。位掩蔽是我一直在寻找的 - 我正在寻找错误的东西。
标签: c bit-manipulation bitwise-operators