BLE 中央阵列缓冲区

使用Cordova BLE central和Ionic,我正在尝试编写(没有Response)。

根据文档,数据格式是ArrayBuffer。

从数据包分析中我知道写入的值应该是02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D

我的问题是如何使用JavaScript创建所需的ArrayBuffer?

我试过

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


蛊毒传说
浏览 80回答 1
1回答

繁花如伊

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位值。您必须确保数据的字节序,以确保字节不需要交换。通过使用 TypedArray 获取 ArrayBuffer。这适用于浏览器:    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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript