工作场景:
安卓设备中需要通过软件,发送命令,将硬件设备中的滚轮,根据输入的数字,左移或者右移,调整到正确的位置。
硬件端的要求是:byte 8位数据,前两位设置为固定的命令数据,第三位作为负号位,0为正,1为负。后五位是输入的数字的二进制数据。
举个例子,我们限制输入的大小,-16到16。只能输入这个范围内的整数。
以输入15为例子。15的二进制数据为 0000 1111。
但是此处需要将这个二进制数据进行转化,转换为硬件方需要的数据。比如说前两位设置为11,
那么满足硬件的数据为:1100 1111.
那么比较关键点就是 0000 1111 到1100 1111的转换。这个时候,我们来看,主要有变化的是前三位,而且我们固定输入的数据大小,最后二进制表达 为1 0000 。那么此时我们可以采用或运算。
或运算的主要点就是只要有1 就是1 都是0才等于0 。
我采取的方案如下:1.输入的内容,保存输入的数字的绝对值,即正数值。2.保存一个布尔值 作为输入的内容是否是负数。方便在进行或运算的时候,调整为硬件需要的数据。
那么正数的情况下,需要进行或运算的二进制数据为 1100 0000 ,十进制数据为 192.
负数的情况下,需要进行或运算的二进制数据为 1110 0000,十进制数据为224。
与硬件通讯协议规定:命令为16进制的字符串,返回值也为16进制的字符串。
所以,在拿到符合硬件要求的数据之后,需要转化为16进制的字符串,拼接成相应的命令。
拿到相应的十六进制字符串之后,获取byte数组,写入硬件即可。