簡體   English   中英

BLE 中央 ArrayBuffer

[英]BLE central ArrayBuffer

將 cordova BLE 中央與 Ionic 一起使用,我正在嘗試編寫(無響應)。

根據文檔,數據格式是 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

https://nodejs.org/api/buffer.html#buffer_buf_buffer

不保證此 ArrayBuffer 與原始 Buffer 完全對應。 有關詳細信息,請參閱 buf.byteOffset 上的注釋。

底層 ArrayBuffer 中的 Buffer 數據從.byteOffset開始

您還為 Buffer.from 讀取的十六進制字符串使用了錯誤的格式,並且您還需要告訴它使用“十六進制”編碼(默認為“utf-8”)。 它不理解空格(也不理解 16 位值的概念,這將是 TypedArrays 和 the.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM