使用cordova BLE中心和Ionic,我试图写(withoutResponse)。
根据文档,数据格式是ArrayBuffer。
从数据包分析中,我知道写的值应该是02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D
我的问题是如何使用ArrayBuffer创建所需的JavaScript?
我试过了
Buffer.from("02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D").buffer
但是,当我检查交换的数据包时,书面值是
3032 4644 2031 3630 3020 3030 3030 2030 3030 3020 3030 3245 2031 3438 3120 3146 3846 2037 3530 3020 3030 3030 2030 3034 44
发布于 2020-05-26 10:51:32
https://nodejs.org/api/buffer.html#buffer_buf_buffer
这个ArrayBuffer不能保证与原始缓冲区完全对应。有关详细信息,请参阅buf.byteOffset上的说明。
缓冲区在底层ArrayBuffer中的数据从.byteOffset开始
您还对Buffer.from读取的十六进制字符串使用了错误的格式,您还需要告诉它使用‘十六进制’编码(默认值是'utf-8')。它不理解空间(也不理解16位值的概念,这将是TypedArrays、.readInt16BE和其他实用函数的工作)。
buf=Buffer.from("02FD160000000000002E14811F8F75000000004D",'hex')
data=buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.length)我不知道你从哪里得到的数据,但它看起来像是16位值。您必须确保数据的端点性,以确保不需要交换字节。
通过使用ArrayBuffer获取TypedArray。这在浏览器中是可行的:
data = new Uint16Array("02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D"
.split(' ').map(x=>parseInt(x,16)))
console.log([...data].map(x=>x.toString(16).padStart(4,'0')).join(''))
buf = data.buffer; //ArrayBuffer
https://stackoverflow.com/questions/62020071
复制相似问题