我有4个引脚值定义P1_1,P1_2,P1_3,P1_4,带有位值。 (1/0)
我想将它们组合成一个字节值,例如:
0000 0101( 3 LSB是引脚 )
我该怎么做?
答案 0 :(得分:7)
像
这样的东西value = (P1_1<<3)|(P1_2<<2)|(P1_3<<1)|(P1_4);
免责声明:这是一个非常丑陋的例子。在您的实际代码中,您可能需要为shift定义某种常量(这样您就可以在不使用更多魔术文字值的情况下执行相反的操作)。
另请注意,如果P常量之一不是0或1,则会产生意外结果。在这种情况下,可能会使用!! P1_x而不是P1_x。
答案 1 :(得分:3)
bitset<4> temp;
temp[0] = P1_1;
temp[1] = P1_2;
temp[2] = P1_3;
temp[3] = P1_4;
unsigned char value = static_cast<unsigned char>(temp.to_ulong());