你好我有一个uint16_t号,我需要将它分成3个部分。
这个数字的前5位给了我一小时。
这个数字的下一个6位给我分钟。
这个数字的下5位给我秒数。
所以我需要将它分成3部分来获取我需要的信息。
任何想法?
答案 0 :(得分:5)
暂且不说,你不能将8位分成16位(我假设你实际上有一个uint16_t,因为这里有意义),你想要的是一个掩码。我们假设您的16位值存储在变量"值"
中要获得第一个(最重要的)5位,您可以使用掩码0xF800,二进制为1111100000000000。
您使用按位AND来应用此:
const uint16_t MASK;
uint16_t value = whatever_was_passed_in;
value = value & MASK;
这会将您不感兴趣的位清零。如果您希望这些位向下移动到变量的最低位,您可以通过右移来实现:
value = (value & MASK) >> 11;
其他组块使用相同的过程处理,但掩码和移位值不同。
答案 1 :(得分:1)
typedef struct bit_time {
unsigned int hour:5;
unsigned int minute:6;
unsigned int seconds:5;
} bit_time_t;