大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说app蓝牙与硬件交互的一些积累[通俗易懂],希望您对编程的造诣更进一步.
最近又在做需要蓝牙和硬件交互的app应用,想正好做一些这方面的积累,方便以后直接可以使用。
手机app通过手机蓝牙向硬件的蓝牙发送数据,数据的处理都是有硬件底层的蓝牙缓存着再向硬件发送命令,命令执行完后硬件通过蓝牙向手机app发送通知命令。具体的底层的流程协议不做硬件开发还是不了解。
关于与蓝牙的数据交互都是十六进制的。这里就会涉及到十进制和十六进制的转换。
十进制转十六进制:
function bytesToHex(bytes) {
var str = '';
for (var i = 0; i < bytes.length; i++) {
str += bytes[i].toString(16).toUpperCase();
}
return str;
}
十六进制转十进制:
function hexToBytes(hexString) {
hexString = hexString.replace(/ /g, '');
if ((hexString.length % 2) != 0) {
hexString += ' ';
}
var returnBytes = new Array(hexString.length / 2);
for (var i = 0; i < returnBytes.length; i++) {
returnBytes[i] = parseInt(hexString.substr(i * 2, 2), 16);
}
return returnBytes;
}
还有经常会遇到的与异或移位预算:
- & 按位于
- | 按位或
- ^ 按位异
- >> 右移
- << 左移
这些都是基于二进制的算法,js也可以用。 & 运算就是两个都为1时结果为1,否则都为0; | 运算就是两个有一个为1结果就为1,两个都为0时结果才为0; ^ 运算就是两个数不一样时结果为1,相同则为0;>> 就是一串二进制数向右移位,数值变小;<< 就是一串二进制数向右移位,数值变大。
这些运算一般都是在算校验位的时候才会用到。
而蓝牙的传输数据都是16进制的数,所以一般取的二进制的8位。 经常会遇到的比如app上的一串数:bytes =[172,255,2,56,78,254,123],算第八位的校验码,校验规则为前面的7个数和取低八位。
var j = 0;
for (var i = 0; i < 7; i++) {
j += bytes[i];
}
return j & 0xFF;
比如当有一串十六进制的数:0x01020304
我们如何去第一位0x01,第二位0x02,第三位0x03,第四位0x04
var a = 0x01020304;
var bytes = new Unit8Array(4);
bytes[0] = (a >> 24)%256;
bytes[1] = (a >> 16)%256;
bytes[2] = (a >> 8)%256;
bytes[3] = a%256;
//这里%运算和&运算可以起到相同的效果
bytes[0] = (a >> 24) & 0xFF;
bytes[1] = (a >> 16) & 0xFF;
bytes[2] = (a >> 8) & 0xFF;
bytes[3] = a & 0xFF;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13909.html