之前写代码没有对buffer进行处理,但这次需要对蓝牙返回的buffer进行一些简单及拼接、组合、排序,所以对buffer了解了一下 整理一下 ,以下只是我应用的一些方法:
一种是转换16进制的方法:
对buffer的解析一般直接转成16进制数据:
function buf2hex(buffer) { // buffer is an ArrayBuffer
return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}
返回的是一个16进制的字符串。一般蓝牙命令会用16进制表示;
另一种是JavaScript中的 DataView 对象进行处理
const buffer = new ArrayBuffer(16);
// Create a couple of views
const view1 = new DataView(buffer);
const view2 = new DataView(buffer, 12, 4); //from byte 12 for the next 4 bytes
view1.setInt8(12, 42); // put 42 in slot 12
console.log(view2.getInt8(0));
DataView 取值可以使用 DataView 的原生方法 mdn地址;
常用的是getInt8 getInt16 等方法,及与buffer 的转换 直接 .buffer 即可 ;
拼接buffer 首先创建一个向压迫长度的 DataView ,然后调用setInt8(或其他)方法即可;
setInt16 占用两个位置 (应该是 ,自测无误)等等。