知识点:
数据的按位移动 <<,>> 及按位或 |
已知:
手机连接了一个蓝牙设备,在向设备发送数据时,需要将两个编号合并为1个字节的新编号。
样例:
编号1的值为2,编号2的值为1,将两个编号合并,结果为0x21,十进制表示为33。
省心操作:
将两个编号转换为十六进制的字符串,将两个字符串相加,即”2“+”1“=”21“。将结果按照十六进制字符串转换为int数据,得出33。
直接操作数据位
从省心的操作中我们知道,两个编号的值均不大于16,否则合并后的数字将超出一个字节,即大于0xFF。实际情况也是如此,两个编号的最大值为B,即十进制下的11。
于是,我们知道序号1的值为2,二进制表示为00000010。将之左移四位,得出结果00100000。
又已知编号2的值为1,二进制表示为00000001。
将左移后的编号1与编号2合并,得出二进制结果为00100001,十进制表示即为33。
代码如下:
uint8_t id1 = 2; //
uint8_t id2 = 1;
uint8_t id = (id1<<4)|id2;
printf("id=%d\n",id); // 打印结果33