app蓝牙与硬件交互的一些积累[通俗易懂]

app蓝牙与硬件交互的一些积累[通俗易懂]title: app蓝牙与硬件交互的一些积累 date: 2016-09-24 07:30:23 categories: Javascript 最近又在做需要蓝牙和硬件交互的app应用,想正好做一些这

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

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注